概要
過去に attachment を使った方法を紹介しました
今回は send_file を使います
環境
- macOS 11.6.1
- Ruby 3.0.3p157
- Sinatra 2.1.0
サンプルコード
- vim app.rb
require 'sinatra'
class DownloadApp < Sinatra::Base
get '/send_file/:file_name' do |file_name|
send_file(file_name, disposition: 'attachment')
end
not_found do
"file not found"
end
end
- vim config.ru
require './test'
run DownloadApp
- touch hoge
起動
- bundle exec rackup config.ru
動作確認
- curl -O -v localhost:9292/send_file/hoge
< HTTP/1.1 200 OK
< Content-Type: application/octet-stream
< Content-Disposition: attachment; filename="hoge"
< Last-Modified: Mon, 13 Dec 2021 23:45:05 GMT
< Content-Length: 15
< X-Content-Type-Options: nosniff
< Connection: keep-alive
< Server: thin
Content-Disposition が設定されていることがわかります
また attachment とは違いファイルの情報をそのまま送るため送信データを最後に記載する必要がありません
ファイルの最終更新日 (Last-Modified) もヘッダに設定されます
最後に
attachment はあくまでもヘッダの設定で send_file はヘッダの設定も含めてレスポンスを返してくれるヘルパーメソッドになります
0 件のコメント:
コメントを投稿