Sinatra で画像を出力する
send_file
を使用して画像ファイルを配信する方法ではなく、DB などに保存していたバイナリデータを直接出力する方法です。
get '/images/:id' do |id|
# レコード取得
@item = Item.where(:id => id).first
if @item and @item.image
# content_type をセット(image/jpeg など)
content_type @item.image.content_type
# 画像を出力
@item.image.body
else
# 404
not_found
end
end
http://localhost:4567/images/3
などとアクセスすると画像が出力されます。
もし画像を保存させたいのであれば、画像を出力する前に、Content-Disposition
ヘッダをセットしてあげます。
response["Content-Disposition"] = "attachment"
send_data
というメソッドが以前は存在していたらしいですが、1.0 系から削除されたみたいです。
あと数分で 2012 年ですが、来年はもっとブログを書いて行きたいと思います。 どうぞよろしくお願いします!