2021年12月17日金曜日

Sinatra でファイルをダウンロード数 API を作る (send_file 編)

Sinatra でファイルをダウンロード数 API を作る (send_file 編)

概要

過去に 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
require './test'

run DownloadApp
  • touch hoge

起動

動作確認

  • 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 件のコメント:

コメントを投稿