Warum könnte der folgende Code eine beschädigte ZIP-Datei generieren, wenn sie über einen Servlet-Ausgabestream ausgegeben wird? Wenn Sie die ZIP-Datei mit einem FileOutputStream lokal auf dem Datenträger schreiben, scheint der Ausgabestream nicht beschädigt zu sein.JAVA - Beschädigte ZIP-Datei mit ZipOutptuStream mit FileInputStream
// Create zip stream
ZipOutputStream zos = new ZipOutputStream(this.servletOutputStream);
// prepare a new entry
ZipEntry zipEntry = new ZipEntry(forZip.getName());
zipEntry.setSize(forZip.getTotalSpace());
zipEntry.setTime(System.currentTimeMillis());
// write entry
zos.putNextEntry(zipEntry);
// write the file to the entry
FileInputStream toBeZippedInputStream = new FileInputStream(forZip);
IOUtils.copy(toBeZippedInputStream, zos);
zos.flush();
// close entry
zos.closeEntry();
// close the zip
zos.finish();
zos.close();
this.servletOutputStream.flush();
this.servletOutputStream.close();
// close output stream
IOUtils.closeQuietly(toBeZippedInputStream);
Ist das vielleicht ein Problem mit der Reihenfolge der Flushing/Closing-Streams?
Sie möchten den 'toBeZippedInputStream' anstelle der' zos' spülen? – LostKatana
Wie stellen Sie fest, dass Stream-Daten beschädigt sind? –
Wie können Sie sicher sein, dass das Problem nicht in dem Code enthalten ist, den Sie nicht angezeigt haben? Wenn dieser Code fehlerhaft ist, sollte es nicht zu schwierig sein, einen [mcve] vorzubereiten und zu präsentieren. –