LINUX.ORG.RU

Формирование и отдача файла в CGI скрипте

 ,


0

2

Доброго времени суток.

Возникла необходимость к работающему perl скрипту прикрутить Web UI. Скрипт ( написан и отлажен ) принимает имя конфига ( конфиг в yaml ), и в соответствии с ним строит отчёт ( xls файл ) с выборкой из БД ( CMDB ).

В самых общих чертах я представляю тебе так: вспомогательный CGI скрипт генерит страницу с кнопкой ( это я осилю ), по нажатию на кнопку запускается первый скрипт и формирует файл с отчётом (скрипт для генерации отчёта уже есть), после чего пользователю предлагается скачать этот файл ( а вот как отдать в браузер файл - не знаю ). Т.е. хотелось бы в один клик по кнопке ( или ссылке ) получать актуальный отчёт.

Пните пожалуйста в нужном направлении. Затруднение именно в том, чтобы выдать в браузер созданный файл. Основное желание - сократить объём кода, т.к. тратить много времени на Web UI не хочется.

Также интересуют существование готовых интерфейсов, в которые можно установить свой скрипт, или CMDB с нормальными человеческими отчётами :D

★★★★★

Последнее исправление: router (всего исправлений: 1)

Затруднение именно в том, чтобы выдать в браузер созданный файл

кури HTTP спеку, «файл» который будет скачан от того который будет открыт в браузере страницы отличается заголовком «Content-Disposition», в данном случае если файл у тебя на диске сервера сохранен, то достаточно послать пользователю редирект на тот файл, если у бея пото байт - то выдай его с указанным заголовком (в немже имя файла).

Deleted
()

Как вариант, генерить файл с отчетом каждые n-минут, генерить страницу со ссылкой на актуальный файл. Актуальные отчеты такие актуальные.

power
()
Ответ на: комментарий от Deleted

Спасибо за наводку про Content-Disposition, недавно сильно было нужно, а времени не было, а вот теперь тред напомнил про желаемое.

minakov ★★★★★
()
Ответ на: комментарий от power

Вхолостую дергать базу может быть не совсем удобно, если отчет нужен паре клиентов. А вот при большом количестве запросов да. И еще интереснее заполнятель базы модифицировать - чтобы флажок переключал при обновлении записей. Ну или дату последнего изменения тыкать, чтобы не пересчитывать все вхолостую

minakov ★★★★★
()

можно еще так: по нажатию на кнопку cgi-скрипт запускает первый скрипт, он формирует файл с отчетом в директории, доступной по http, затем cgi-скрипт отдает редирект на этот файл. заодно еще будет история отчетов.

hatefu1_dead
()
Content-Disposition: attachment; filename=foo.bin
Content-type: application/octet-stream
Minoru ★★★
()
Последнее исправление: Minoru (всего исправлений: 1)
Ответ на: комментарий от Deleted

Почитал, познавательно. Пока сделал как предлагал hatefu1_dead, отдачу файла с помощью content-disposition пока отложил про запас :)

router ★★★★★
() автор топика
Ответ на: комментарий от hatefu1_dead

Спасибо, это самый простой вариант. Так и сделал

router ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.