Rails ActionDispatch::Http::UploadedFile to File
RailsでFileをActionDispatch::Http::UploadedFileに変換する方法
require 'mime/types'
File.open(path) do |file|
filename = File.basename(file.path),
ActionDispatch::Http::UploadedFile.new(filename: filename, type: MIME::Types.type_for(filename).first.to_s, tempfile: file))
end
# eg:
MIME::Types.type_for("filename.gif").first.content_type # => "image/gif"
# アップロードファイル情報
uploaded_file = params[:file]
→ActionDispatch::Http::UploadedFile型でアップロードしたファイルの情報が返ってくる。
以降、uploaded_fileは「ActionDispatch::Http::UploadedFile」のインスタンスになっていることを意識。
# ファイル名
uploaded_file.original_filename
→String型でファイル名(パスを含まず、拡張子を伴うもの)が返ってくる(xxx.csvとか)
# コンテンツタイプ
uploaded_file.content_type
→String型でMIME_TYPEが返ってくる(text/csv とか)
# アップロードされたファイルのTempfileインスタンス
uploaded_file.tempfile
→ファイルをformからアップロードすると、tempfileインスタンスが作られ、リクエストに対するサーバー側での一連の処理終了後に削除される模様。
# Tempfileインスタンスを経由するショートカットメソッド群
## 一時ファイルのサイズ
uploaded_file.size
→Integer型でファイルサイズ(バイト単位)が返ってくる
## 一時ファイル本体の読み込み
uploaded_file.read
→String型で読み込んだ全行分の文字列が返ってくる
## 一時ファイルのパス
uploaded_file.path
→String型でパスが返ってくる
# アップロードファイル情報を取得
uploaded_file = params[:file]
# アップロードファイル(一時ファイル)パス
uploaded_temp_file_path = uploaded_file.path
# アップロードファイル(元ファイル)名
uploaded_file_original_file_name = uploaded_file.original_filename
# アップロードファイル(一時ファイル)を全行分読み込んだもの
uploaded_file_content = uploaded_file.read
# 保存先ディレクトリパス
save_dir_path = Pathname("/aaa/")
# 保存先ディレクトリを作成
run_cmd("mkdir -p #{save_dir_path}")
# 保存先ファイルパス
save_file_path = save_dir_path.join(uploaded_file_original_file_name)
# ファイルを保存(〜へ〜を書き込むという引数順序)
File.binwrite(save_file_path, uploaded_file_content)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话