ich eine Reihe von Excel-Sheets hava, die ich packen möchten, und ermöglichen es dem Benutzer, um sie herunterzuladen. Zum Zippen aller Excel-Tabellen habe ich die java.util.zip.ZipOutputStream-Bibliothek verwendet.java.util.zip.ZipException: doppelte Eintrag: Dynamisches Webprojekt Tomcat Laufzeit Ausnahme
Code Snippet wird unter gegeben:
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command,
BindException errors) throws Exception {
// some code to get the list
Iterator<StudentSheet> it = list.iterator();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
while (it.hasNext()) {
StudentSheet is = it.next();
String fileName = is.getStudentCode() + "_" + is.getStudentName() + ".xls";
fileName = fileName.replaceAll(" ", "_");
logger.debug("FileName: " + fileName);
ZipEntry entry = new ZipEntry(fileName);
byte[] input =StudentManager.loadStudentSheetExcel(is.getId());
entry.setSize(input.length);
zos.putNextEntry(entry);
zos.write(input);
zos.closeEntry();
}
zos.close();
String zipFileName = "ABC.zip";
logger.debug("ZipFileName: " + zipFileName);
try {
streamZipOutput(zipFileName, "application/zip", baos, response);
}
catch (IOException e) {
e.printStackTrace();
}
finally {
baos.close();
}
return null;
}
public void streamZipOutput(String zipFileName, String type, ByteArrayOutputStream baos,
HttpServletResponse response) throws IOException {
response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + "\"");
response.setContentType(type);
response.getOutputStream().write(baos.toByteArray());
response.flushBuffer();
}
Dieser Code absolut in Ordnung von Google Chrome-Browser ausgeführt wird. Wenn ich meine Anwendung von Internet Explorer ausführen, bekomme ich diese Ausnahme während der Laufzeit:
Feb 11, 2017 5:45:00 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [action] in context with path [/appName] threw exception
java.util.zip.ZipException: duplicate entry: 110_Vedant.xls
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:232
Ich bin nicht in der Lage, warum doppelten Eintrag Problem herauszufinden. Die Namen jeder Excel-Datei sind eindeutig und Chrome gibt keine Ausnahme, wenn ich das gleiche erzeuge. Hilf mir herauszufinden, wie ich das lösen kann. Was verursacht dieses Problem?
Mein Internet Explorer Version: 11.713.10586.0
EDIT Früher Taste war wie diese absenden:
<div id="pageButtons">
<button type="submit" onClick="sendAction('submit')"> Submit </button>
</div>
Und die sendAction Funktion war wie:
function sendAction(anAction){
document.form._action.value = anAction ;
document.form.submit();
}
Also da der Button-Typ ist sende und auch ich n die Funktion sendAction, die ich mache, sende nach Code, also denke ich, dass es zweimal gleichzeitig gesendet wurde.
Also änderte ich den Knopf HTML-Teil zu:
<div id="pageButtons">
<button onClick="sendAction('submit')"> Submit </button>
</div>
Noch zweimal vorgelegt wurde es.
Dann habe ich es zu:
<div id="pageButtons">
<button type="button" onClick="sendAction('submit')"> Submit </button>
</div>
dann in IE Es hat gut funktioniert. Nun, was ich nicht verstehen kann, ist, wenn das Type = "submit" -Ding zweimal in IE zur Formularübergabe führte, warum es in Chrome gut lief. In Chrome auch, sollte es zweimal reichen, weil Button-Typ ist submit und ich habe auch hardcode "document.form.submit()".
Kann mir jemand den Grund geben?
Ich gehe davon aus, dass es hier geworfen wird: zos.putNextEntry (Eintrag) ; Es ist tief im Server. Kein bowserspezifischer Code. Könnten Sie überprüfen, dass dieselbe Anfrage nicht zweimal gleichzeitig gesendet wird? – efekctive
@efekctive Ja, wenn ich von IE laufe, wird die Anfrage zweimal gleichzeitig ausgeführt. In Chrom geht es nur einmal. Wieso ist es so ? Kannst du helfen ? –
Das einzige, was mir einfällt, ist, Ihre Anfragen/Sitzungen zu identifizieren und sie auf dem Server zu verfolgen. – efekctive