Я создал текстовый документ, используя 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
Хорошо работает, и документ успешно создан на моем локальном рабочем столе. Если я пытаюсь загрузить с помощью браузера и открыть его напрямую (или сохранить и открыть его), появляется сообщение об ошибке, указывающее, что документ поврежден. Нажатие на открытие документа по-прежнему открывает документ, но кто-нибудь знает, почему я получаю это сообщение? Любая помощь будет принята с благодарностью !!
Нажав OK, я получаю это сообщение:
Если я нажму «Да», документ откроется.
РЕДАКТИРОВАТЬ: 06/29 - Обновлен код для генерации формата * .docx. Также добавлен Content-Length в заголовок ответа. Попытался удалить Content-Length тоже, оба из которых не работали.