2017-05-17 14 views
0

ケマルにthis answerを実装します。KemalでHTTP応答ヘッダーを設定する

私の現在の設定が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結果:私はContent-Type: application/pdfを見るために望んでいるだろう

HTTP/1.1 200 OK 
Connection: keep-alive 
X-Powered-By: Kemal 
Content-Type: application/octet-stream 
ETag: W/"1494983019" 
Content-Length: 1170498 

+0

こんにちは! まず、私はhttp://stackoverflow.com/questions/20508788/do-i-need-content-type-application-octet-stream-for-file-download が参考になると思います。第二に、あなたの実際の質問は何ですか? –

+0

私はちょうどあなたのコードを試して、それは働いた。サーバーを停止してアプリケーションを再度コンパイルしてもよろしいですか?再コンパイルせずに変更を加えても効果はありません。 – asterite

答えて

-2

私はContent-Type:application/pdfが見たいと思っています。

要点は、Content-Dispositionがヘッダーとして存在しないことです。 何らかの理由でヘッダーをまったく送信しないことがあります。

たとえばPHPでは、スクリプトがヘッダを送信する前に1バイトを出力すると、ヘッダは送信されません。最初の出力の前にヘッダーのみ。 一部のデータの送信後にhttpヘッダーを設定すると、ヘッダーは無視されます。

+0

2番目の段落で何を言っているのか分かりません。 – Jones

+0

あなたはこの質問にどう答えますか?申し訳ありませんが、私はそうではないと思います。 –

2

ここケマルの作者、

ヘッダがOKであれば、あなたが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 
+0

これらの変更では、それでもダウンロードを促し、content-typeは 'Content-Type:text/html'ではありません。 – Jones

関連する問題