Ошибка создания zip-файла в памяти с использованием Java - PullRequest
0 голосов
/ 07 марта 2012

Вот код, который я использую для создания zip-файла:

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-файл возвращается в браузер для загрузки, но когда я пытаюсь скачать файл, яполучение ошибки, в которой говорится, что файл не может быть загружен из-за того, что zip-файл недействителен.

Документ - это объект, который содержит всю информацию о файле, включая фактический файл.

Есть идеи, что я делаю не так?Я попробовал много вариантов этого, и ни одна из них, похоже, не работает.Заранее спасибо.

Кит

1 Ответ

2 голосов
/ 23 марта 2012

Попробуйте использовать метод out.write с 3 аргументами.

Заменить: out.write(d.getFileBytes());

С: out.write(d.getFileBytes(),0,d.getFileBytes().length);


Примечание. Согласно документу java метод записи с одним параметром не читается.

Записывает байты b.length в этот выходной поток.

Метод записи FilterOutputStream вызывает метод записи из трех аргументы с аргументами b, 0 и b.length.

Обратите внимание, что этот метод не вызывает метод записи с одним аргументом его основной поток с единственным аргументом b.

Внесение этого изменения в мой собственный код устранило мою проблему.

...