1

我想在凯末尔实现这个答案

我当前的设置有一个 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

当我通过在浏览器(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

4

2 回答 2

3

凯末尔作者在这里,

如果标题没问题,你应该很好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
于 2017-05-17T04:31:03.290 回答
-2

我希望在哪里看到 Content-Type:application/pdf。

关键是它Content-Disposition不作为标题存在。也许您出于某种原因根本不发送任何标题。

例如在 PHP 中,如果您的脚本在发送标头之前输出一个字节,则不会发送标头;只有第一个输出之前的标题。如果在发送一些数据后设置 http 标头,则标头将被忽略。

于 2017-05-17T01:47:20.063 回答