|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Начало проблемы: https://www.sql.ru/forum/1321376/rest-controller-vozvrashhaushhiy-fayl-excel https://www.sql.ru/forum/1321467/pokazat-v-brauzere-polzovatelu-otchet-sformirovannyy-na-servere-jasperreports Сделано: В браузере пользователь заполняет параметры отчета, нажимает кнопку "Сформировать отчет", в той же вкладке, ниже параметров, открывается сформированный отчет в html Добавилась задача: добавить кнопку "Скачать отчет в формате xlsx", по по нажатию на которую начинается скачивание xlsx файла. Делаю в сервисе так (не уверен, что это правильно): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Аналогично было сделано для html, и далее в контроллере Html обрабатывался следующим образом: Код: java 1. 2. 3. 4. 5. 6. 7.
Далее, на клиенте это попадает в JavaScript, там происходит следующее: Код: javascript 1. 2. 3. 4. 5. 6.
Вопрос: как обработать в контроллере полученный byte[], чтобы на клиент отправился xlsx файл? Как обработать этот файл на стороне клиента, чтобы он вызвал диалог сохранения файла в браузере? Может быть я вообще неверно подхожу к скачиванию файла с сервера? Как, в таком случае, правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:20 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, Основы веб приложений это переходы по урл. Есть альтернатива - приложения одного окна. Когда все пихают на один урл окно. Даже если тебя заставляют делать что то по ajax в том же окне - старайся не делать так. Да, без ajax окно моргнет и обновится за 0,1 сек. Но зато приложение будет большим, устойчивым к ошибкам и масштабируемым. .... То есть скачку файла в отдельном окне. Отчет не во вкладке а в отдельном окне. Либо вкладки из отдельных контроллеров окон. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:28 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, А если не обсуждать архитектуру приложения, то что по моим вопросам: как обработать в контроллере полученный byte[], чтобы на клиент отправился xlsx файл? Как обработать этот файл на стороне клиента, чтобы он вызвал диалог сохранения файла в браузере? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:33 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов Добавилась задача: добавить кнопку "Скачать отчет в формате xlsx", Отправить запрос на сервер сабмитом с перерисовкой страницы. То есть на данной странице тег form html и кнопка action post Чтобы потом получить то что надо на новую ModelView ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:34 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, Если не обсуждать то трудно вникать. Ты там намешал два отчета, upload download и параметры отчетов. Извини. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:36 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, если у тебя есть сформированный файл на диске Код: html 1.
в кнопки на событие клик Код: javascript 1.
ну заполнение тега a , с помощью ajax сделаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:39 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, 1. Что мне надо вернуть контроллеру из сервиса? Сейчас возвращается byte[]. 2. Сейчас я при экспорте указываю имя файла для экспорта. Правильно ли я понимаю, что в таком случае файл создается не на диске сервера, т.к. нет полного пути, а только в памяти? 3. В любом случае я отправляю с клиента HTTPRequest, как обработать полученную им из контроллера информацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:43 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, вам нужно указать клиенту, что делать с тем, что ему отдаёте: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:47 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, этим ты создаёшь файл на диске Код: java 1.
всё бы нормально, но если несколько юзеров нажмут на скачивание - что будет в файле? я б добавил логин юзера к имени файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:48 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
skyANA, можно проще при нажатии кнопки отправить на сервер "команду скачать" , сервер , в ответе ajax вернёт путь до файла, в ajax в обработке ответа вставить в тег a путь и програмно нажать на тег Код: javascript 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:53 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя, Добавлю к имени милисекунды времени создания ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:53 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя, авторпри нажатии кнопки отправить на сервер "команду скачать" , сервер , в ответе ajax вернёт путь до файла, В таком случае можно сделать, чтобы сервис передавал в контроллер имя файла, и контроллер возвращал его аяксу? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:56 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
если использовать spring boot, то загуглите ResponseEntity<Resource> копипастну вам сюда метод из нашего контроллера, думаю разберетесь, ну или нет :) ApiOperation это аннотация сваггера, она не обязательна вам. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
отдельно метод getContentDispositionFromReport Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:58 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Код: javascript 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:59 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, Ты же первый файл делал отчета? По урлу /REPORT1 Зачем тебе ajax для второго? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:59 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов вадя, авторпри нажатии кнопки отправить на сервер "команду скачать" , сервер , в ответе ajax вернёт путь до файла, В таком случае можно сделать, чтобы сервис передавал в контроллер имя файла, и контроллер возвращал его аяксу?ты на диске не создавал. Откуда он? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:00 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ты на диске не создавал. Откуда он? отсюда Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:02 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов Добавлю к имени милисекунды времени создания ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:04 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя отсюда ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:05 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp я же говорю, намешал лапшекода. ТС использует JasperReports, а он создаёт файл на диске. у него есть работающий код для html небольшие изменения и файл на скачивание всё просто и логично ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:14 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя, Прочти его прошлый топик ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:18 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Прочти его прошлый топик ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 13:27 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Сделал так. Контроллер: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Сервис: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
JavaScript: Код: javascript 1. 2. 3. 4. 5. 6. 7.
В логе браузера получаю: PK����������7P����������������xl/drawings/drawing1.xml��M �0��ཧ(���.DJ�6�����f���I�D[oo�Ե�|<��7U��9{Q�㸆S^@F�;mx��q����ID�8;���$�6�jա\���,�,e�5L1�R)�'�(��ĩ�\��S�����D�Y�����B-�Q��v���,���?����Թ�i����1�w�d�@ڪ����PK����i�����/���PK����������7P����������������xl/_rels/workbook.xml.rels���j�0�@�� ... Насколько я понимаю, это желаемый мной файл xlsx. Можно ли как-то в браузере вызвать для него диалог сохранения? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:15 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, я ж тебе код показал!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:22 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, тебе не надо передавать файл, надо передать только путь к файлу ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:23 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов, Твой ajax запрос используют для скрытого получения с сервера. А диалог сохранения это открытое получение. Диалог от самого эксплорера. То есть то о чем я говорил выше. Надо получить без ajax свой файл. Потом опять назад вернешься на свою страницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:24 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Павел Гужанов, Твой ajax запрос используют для скрытого получения с сервера. А диалог сохранения это открытое получение. Диалог от самого эксплорера. То есть то о чем я говорил выше. Надо получить без ajax свой файл. Потом опять назад вернешься на свою страницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:25 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Сделать копию прошлого контроллера для pdf. Когда контроллер (без создания на диске) отдаст файл в response. Ослик увидит что это не pdf и он не может такой открыть сам, то предложит сохранить на диск. ВЫЗОВЕТ ДИАЛОГ. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:28 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя не надо так делать!!!! У нас разница в одной строке ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:30 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя, Есть опасение, что это не прокатит. Файл создается на сервере, а у меня есть только имя файла, без пути. И каким будет путь извне - непонятно. Поэтому я стал сразу передавать файл пользователю. Но запрос на сервер я отправляю из Javascript, ответ получаю там же. И хочу его сохранить. Еще есть вариант - посадить на кнопку "Получить xlsx" ссылку с нужным url. Но мне надо передать параметры отчета в теле POST запроса, в URL их передавать не хочется ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:32 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp контроллер все равно делать. У нас разница в одной строке жевать не буду Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:33 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов Есть опасение, что это не прокатит. Файл создается на сервере, а у меня есть только имя файла, без пути. И каким будет путь извне - непонятно. Павел Гужанов Еще есть вариант - посадить на кнопку "Получить xlsx" ссылку с нужным url. Но мне надо передать параметры отчета в теле POST запроса, в URL их передавать не хочется я что тебе показал? путь к файлу и и твой url к файлу - это ли не одно и тоже????? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:36 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя но зачем дергать страницу? Делайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:47 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp либо ты ему даешь весь код на блюдечке, либо он сам по шагам сделает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:51 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя PetroNotC Sharp либо ты ему даешь весь код на блюдечке, либо он сам по шагам сделает. Чем вчерашний его pdf отличается от сегодня эксель? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:53 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ну дак и не давай код. Чем вчерашний его pdf отличается от сегодня эксель? через ссылку на файл и через блоб ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:56 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ну дак и не давай код. вадя дак я уже два варианта дал ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:58 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов Можно ли как-то в браузере вызвать для него диалог сохранения? Смотри, что у тебя в итоге в заголовке Content-Disposition передаётся ЦитруюПервым параметром в контексте HTTP должен быть или inline (это значение по умолчанию, указывающее, что контент должен быть отображен внутри вэб-страницы или как вэб-страница) или attachment (указывает на скачиваемый контент; большинство браузеров отображают диалог "Сохранить как" с заранее заполненным именем файла из параметра filename, если он задан) . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 19:17 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Павел Гужанов В логе браузера получаю В логе браузера? О чём речь? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 19:20 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
skyANA В логе браузера? О чём речь? Код: javascript 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 19:25 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
вадя skyANA В логе браузера? О чём речь? Код: javascript 1. 2. 3.
Не понятно зачем данные запрашиваются аяксом. Достаточно просто ссылки на url. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 21:05 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
skyANA Не понятно зачем данные запрашиваются аяксом. Достаточно просто ссылки на url. 22065192 запрашивается имя файла ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 21:08 |
|
JasperReports. Скачивание сгенеренного xlsx файла
|
|||
---|---|---|---|
#18+
Всем спасибо за помощь. Заработало все как надо. Для скачивания файла используется ссылка, как написал Вадя, параметры передаю в url. Контроллер принимает, создает из них объект параметров, передает с сервис. Сервис возвращает имя файла и массив байт. Далее, как написал Nixic, в контроллере создается ResponseEntity и возвращается клиенту. Еще раз СПАСИБО ВСЕМ! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 11:17 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120930]: |
0ms |
get settings: |
25ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
735ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 1162ms |
0 / 0 |