Zip files on the fly
posted 17 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
Tried to zip multiple files on the fly in java servlet with zip package (ZipOutputStream), so users can download the zip file by calling the servlet. It works fine for small files. But occasionally the browser stops the download before completion when users invoke the servlet action, and the zip file downloaded is corrupted.
The servlet response header �content length� is not set, since the zip file is generated on the fly and we don�t know the size. �Transfer-Encoding� is set to �chunked� to resolve the dynamic content length:
Here is related code:
response.setContentType("application/zip");
response.setHeader("Transfer-Encoding", "chunked");
ServletOutputStream os = response.getOutputStream();
ZipOutputStream out = new ZipOutputStream(os);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(filePath));
copyContentsToOutput(out);
out.closeEntry();
out.flush();
out.close();
copyContentsToOutput(OutputStream out) {
InputStream input = FileInputStream(inputFile);
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
try {
while ((bytesRead = input.read(buffer, 0, bufferSize)) != -1) {
output.write(buffer, 0, bytesRead);
}
}
}
Please help. Thanks in Advance.
YSong
The servlet response header �content length� is not set, since the zip file is generated on the fly and we don�t know the size. �Transfer-Encoding� is set to �chunked� to resolve the dynamic content length:
Here is related code:
response.setContentType("application/zip");
response.setHeader("Transfer-Encoding", "chunked");
ServletOutputStream os = response.getOutputStream();
ZipOutputStream out = new ZipOutputStream(os);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(filePath));
copyContentsToOutput(out);
out.closeEntry();
out.flush();
out.close();
copyContentsToOutput(OutputStream out) {
InputStream input = FileInputStream(inputFile);
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
try {
while ((bytesRead = input.read(buffer, 0, bufferSize)) != -1) {
output.write(buffer, 0, bytesRead);
}
}
}
Please help. Thanks in Advance.
YSong
Yudong Song
Greenhorn
Posts: 2
posted 17 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
Anyone can help? How should I set the response header correctly, so the browser won't drop the connection before completing the download. It's a
production issue, please help!
production issue, please help!
posted 17 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
This doesn't seem to be generating much interest here.
I'll move it to our Streams and I/O forum for you.
Maybe it will do better there.
I'll move it to our Streams and I/O forum for you.
Maybe it will do better there.
| Hey, sticks and stones baby. And maybe a wee mention of my stuff: The new gardening playing cards kickstarter is now live! https://www.kickstarter.com/projects/paulwheaton/garden-cards |








