У меня есть серверная веб-панель, и я пытаюсь создать файл excel с POI Apache, который предоставляется как загрузка с помощью бэкэнда. Я могу записать файл на серверный диск, но не писать его в ответ HTTP.Загрузка двоичного файла, созданного в бэкэн-бэнде, отображается как простой текст на клиенте
Вот мой код
public void createExcel(){
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
HSSFWorkbook workBook = new HSSFWorkbook();
HSSFSheet sheet = workBook.createSheet("hello world");
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue(new HSSFRichTextString("Hello"));
cell = row.createCell(1);
cell.setCellValue(new HSSFRichTextString("world"));
workBook.write(bos);
bos.flush();
FacesContext fc = FacesContext.getCurrentInstance();
downloadExcel(bos, fc);
} catch (FileNotFoundException e) {
log.debug("file not found ", e);
} catch (IOException e){
log.debug("IOException ", e);
}
}
public void downloadExcel(ByteArrayOutputStream baos, FacesContext fc){
HttpServletResponse response = (HttpServletResponse)fc.getExternalContext().getResponse();
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment; filename=testxls.xls");
try {
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
} catch (IOException e) {
log.error("IOException ", e);
}
fc.responseComplete();
}
И результат следующий
Это происходит во всех браузерах я пробовал: Chrome, FF и IE. Надеюсь, вы можете указать, что мне здесь не хватает.
Результат нечитаемый. Не размещайте фотографии текста. Отправьте текст. Вы считали создание CSV? Бесконечно проще, и Excel будет конвертировать его на клиента. – EJP
Нажмите F12 в браузере, откройте вкладку «Сеть», щелкните запрос, представляющий загрузку файла, и посмотрите заголовки ответов HTTP. Какой именно заголовок 'Content-Type' на самом деле установлен? Тем не менее, является ли одним из этих вопросов? http://stackoverflow.com/q/9391838 или http://stackoverflow.com/q/7822758? – BalusC
Ответные заголовки такие же, как я их устанавливал. Просмотрели данные QA и добавили некоторые незначительные изменения в мой ответ (reset, contentLength), но результат все тот же. –