Установка заголовков ответа HTTP с Kemal
Я хочу реализовать этот ответ в Kemal.
Моя текущая настройка имеет PDF-файл в app/public/map.pdf
и следующий код в моем основном кристаллическом файле:
require "kemal"
#...
get "/map.pdf" do |env|
env.response.headers["Content-Type"] = "application/pdf"
env.response.headers["Content-Disposition"] = %(inline;filename="myfile.pdf")
end
Kemal.run
Когда я проверяю свой код, открывая localhost:3000/map.pdf
в браузере (firefox) он предлагает загрузить файл (пока я хочу, чтобы он пытался его отобразить). А также curl -I
результаты в следующем:
HTTP/1.1 200 OK
Connection: keep-alive
X-Powered-By: Kemal
Content-Type: application/octet-stream
ETag: W/"1494983019"
Content-Length: 1170498
Где бы я хотел увидеть Content-Type: application/pdf
,
2 ответа
Кемаль автор здесь,
Если с заголовками все в порядке, с вами должно быть хорошо send_file
, Однако убедитесь, что имя маршрута и файл не совпадают. В этом случае маршрут /pdf
get "/pdf" do |env|
env.response.headers["Content-Type"] = "application/pdf"
env.response.headers["Content-Disposition"] = %(inline;filename="map.pdf")
send_file env, "./public/map.pdf"
end
Где бы я хотел увидеть Content-Type: application/pdf.
Дело в том, что Content-Disposition
не существует в качестве заголовка. Возможно, по какой-то причине вы вообще не отправляете заголовки.
Например, в PHP, если ваш скрипт выводит один байт перед отправкой заголовков, тогда заголовки отправляться не будут; только заголовки перед первым выводом. Если вы установите заголовок http после отправки некоторых данных, тогда заголовок будет игнорироваться.