[Rails]ActiveStorageでファイルダウンロードするAPIを作る[S3]
やること
バックエンドでRailsを使用した場合に、URLを叩いてファイルをダウンロード出来るようにします。
前提
ActiveStorageでファイルをアップロードしていると仮定しています。保存先は(S3 or minio 使用)
実装
ルーティング
今回は、/upload_files/:id/downloadとなるようにルーティングを設定します。
resources :upload_files do
member do
get :download
end
end
コントローラ
def download
upload_file = UploadFile.find(params[:id])
file = upload_file.file.blob.download # ダウンロードする
if send_data(file, disposition: 'attachment', # ダウンロードしたファイルを送信する
filename: upload_file.file.blob.filename.to_s, # ファイル名の取得
type: upload_file.file.blob.content_type) # content_typeの取得
head :no_content # 送信出来たら、no_contentを返す
else
render json: upload_file.errors, status: :not_found # エラーを返す
end
end
file = upload_file.file.blob.download
とすることで、実際にファイルをActiveStorageからダウンロードすることが出来ます。
上記のやり方がなかなか見つからず困っていたのですが、ActiveStorageの公式ドキュメントに書いてありました!
やはり困ったら公式が一番ですね。
https://railsguides.jp/active_storage_overview.html
他にもupload_file.file.blob.filename.to_s
とすることで、ファイル名を動的に取得しています。
これによって、ファイル名に正しく拡張子が含まれます。
感想
困ったら公式を読むことが大事だと実感しました!
Author And Source
この問題について([Rails]ActiveStorageでファイルダウンロードするAPIを作る[S3]), 我々は、より多くの情報をここで見つけました https://qiita.com/daichi0713/items/60f9b2bc40fc535617ed著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .