действие загрузки spring-mvc

#java #excel #spring-mvc #download

#java #excel #spring-mvc #Скачать

Вопрос:

Есть ли какой-нибудь трюк для получения пользовательского представления SpringMVC, вызывающего загрузку файла в broswer? Я реализовал render метод из org.springframework.web.servlet.View , но в результате кода мои данные записываются на страницу в виде большого двоичного объекта данных, а не запускается действие загрузки.

 try {

    Document oDoc = (Document) model.get("oDoc");
    out = new PrintWriter(response.getOutputStream());

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("content-disposition", "attachment; filename=file.xls");

    GenerateXLSFile gof = new GenerateXLSFile();

    gof.outputTSVFromDom(out, oDoc);

} catch block here {

  //writes to log here

} finally {

    if (out != null) {
        out.flush();
        out.close();
    }

}
  

Я знаю, что метод визуализации вызывается из журналов сервера. Я знаю, что файл GenerateXLSFile создается из журналов сервера. Я знаю, что outputTSVFromDom может взять документ и преобразовать его в работу из моего теста JUnit. Оно также записывается в журнал сервера и завершается. Данные заканчиваются в браузере. HTTP-заголовки выглядят нормально в соответствии с firebug. В журнале сервера нет ошибок из блока catch.

Чего мне здесь не хватает?

Комментарии:

1. Вы пробовали возиться с типом контента, чтобы посмотреть, что произойдет, если вы измените его на что-то другое (которое также должно быть загружаемым), например application / octet-stream?

2. Попробуйте out = response.getWriter();

Ответ №1:

Прежде всего, какой API вы используете? Документы Excel являются двоичными, поэтому вам следует использовать OutputStream, а не Writer.

Во-вторых, Spring имеет встроенную поддержку для обслуживания документов Excel:

Комментарии:

1. было проще переписать это для использования AbstractExcelView, чем сохранить неуклюжий старый код со значением табуляции.