загрузка текстового документа с использованием Apache POI создает поврежденный документ - PullRequest
0 голосов
/ 27 июня 2018

Я создал текстовый документ, используя Apache POI API, и могу записать файл на свой локальный компьютер, и он работает очень хорошо, но при записи в response.getOutputStream(), чтобы позволить пользователю загружать с помощью браузера, текстовый документ получает повредиться.

Вот мой код:

String docFile =  "inv_export_012.docx";
FileOutputStream fos= new FileOutputStream("C:\\temp\\" + docFile);

//set response headers
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("Content-Disposition","attachment; filename=" + docFile);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");

//create docx format using XWPFDocument
XWPFDocument wordDocument = new XWPFDocument();
XWPFParagraph p1 = wordDocument.createParagraph();
p1.setAlignment(ParagraphAlignment.LEFT);
XWPFRun r1 = p1.createRun();
r1.setText("Invoice Number: 00000000XXX");
r1.addCarriageReturn();

//write document to local C: drive
//this step works well and I can successfully create the document
wordDocument.write(fos);

//set content length
response.setHeader("Content-Length", String.valueOf(new File("C:\\temp\\" + docFile).length()));
fos.close();
wordDocument.write(response.getOutputStream());

Также пробовал двоичные форматы, и он тоже не работает.

response.setContentType("application/octet-stream");
  • Версия Java: 1.6 (пока не удается обновить до новой версии)
  • Apache POI: 3,16
  • Браузер: Internet Explorer 11 (Мое приложение сертифицировано только в IE, поэтому не может использовать другие браузеры)
  • Офис 2013

Хорошо работает, и документ успешно создан на моем локальном рабочем столе. Если я пытаюсь загрузить с помощью браузера и открыть его напрямую (или сохранить и открыть его), появляется сообщение об ошибке, указывающее, что документ поврежден. Нажатие на открытие документа по-прежнему открывает документ, но кто-нибудь знает, почему я получаю это сообщение? Любая помощь будет принята с благодарностью !!

enter image description here

Нажав OK, я получаю это сообщение:

enter image description here

Если я нажму «Да», документ откроется.

РЕДАКТИРОВАТЬ: 06/29 - Обновлен код для генерации формата * .docx. Также добавлен Content-Length в заголовок ответа. Попытался удалить Content-Length тоже, оба из которых не работали.

1 Ответ

0 голосов
/ 25 ноября 2018

Обнаружено, что POI 3.16 имеет эту проблему, эта проблема решается при обновлении до Apache POI 4.0.0 jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...