我希望在凯末尔实施this answer。
我当前的设置在app/public/map.pdf
中有一个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
当我通过在浏览器(firefox)中打开localhost:3000/map.pdf
来测试我的代码时,它会提示下载文件(我希望它尝试显示它)。 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
。
答案 0 :(得分:1)
凯末尔这里的作者,
如果标题没问题,那么你应该选择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
答案 1 :(得分:-2)
我希望看到Content-Type:application / pdf。
关键是Content-Disposition
不作为标题存在。
也许你出于某种原因根本不发送任何标题。
例如在PHP中,如果您的脚本在发送标头之前输出单个字节,则不会发送标头;只有第一个输出之前的标题。 如果在发送一些数据后设置了http标头,那么标头将被忽略。