Вот код, который я использую для создания архива:Ошибка при создании архива в памяти с помощью Java
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream out = new ZipOutputStream(baos);
try {
for(int i=0; i<docId.length; i++){
BoxDotComDocumentManager docman = new BoxDotComDocumentManager();
Document d = docman.get(docId[i]);
ZipEntry entry = new ZipEntry(d.getFileName());
entry.setSize(d.getFileBytes().length);
out.putNextEntry(entry);
out.write(d.getFileBytes());
resp.setContentType("application/zip");
resp.setHeader("Content-Disposition", "attachment; filename="+ "zipdemo.zip");
out.closeEntry();
}
} catch (Exception e) {
System.out.println("E = " + e);
}
try {
resp.getOutputStream().write(baos.toByteArray());
resp.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
finally {
baos.close();
out.close();
}
почтовый файл возвращается в браузер, чтобы быть загружены, но когда я пытаюсь загрузите файл, я получаю сообщение об ошибке, что файл не может быть загружен, потому что zip-файл недействителен.
Документ - это объект, который содержит всю информацию о файле, включая фактический файл.
Любые идеи относительно того, что я делаю неправильно? Я пробовал много перестановок, и никто из них, похоже, не работает. Заранее спасибо.
Keith
С одной стороны: когда вы сталкиваетесь с фатальной ошибкой, * не * просто распечатывайте трассировку стека. Отказ выполнить запрос. Кроме того, не ловите голый Exceptino - это почти всегда неправильный подход. О, и почему вы устанавливаете заголовки на каждой итерации цикла? –
Jon - Просто пытаюсь сделать счастливую работу трейла, а затем я обработаю все исключения правильно, то же самое с заголовками; их наличие в цикле или снаружи не изменяет ошибку. Они будут выведены из цикла. –
Но это очень легко для вас * пропустить * исключения. IMO, стоит сначала обработать исключение * сначала *, чтобы вы могли узнать, когда вы действительно переживаете счастливый путь ... –