Rails中保存ActionDispatch::Http::UploadedFile为原.xls文件及自定义path
Rails 上传文件相关问题解答
一、将上传的.xls文件保存到Rails.root路径下
可以通过复制临时文件到目标路径的方式实现,同时保留原文件的文件名和类型:
# 获取上传的文件对象 uploaded_file = params[:file] # 拼接Rails.root下的目标路径,保留原文件名(含.xls后缀) target_path = Rails.root.join(uploaded_file.original_filename) # 方法1:用FileUtils复制临时文件 require 'fileutils' FileUtils.cp(uploaded_file.tempfile.path, target_path) # 方法2:用IO流写入(适合大文件,避免一次性加载到内存) File.open(target_path, 'wb') do |dest_file| dest_file.write(uploaded_file.tempfile.read) end
注意:original_filename会返回用户上传时的原始文件名,确保保存后的文件类型与原文件一致。
二、ActionDispatch::Http::UploadedFile.path的定义
path属性指向的是Rails处理上传时生成的临时文件的绝对路径。- 当Rails接收到文件上传请求时,会自动将文件内容写入系统临时目录(比如Linux的
/tmp、Windows的临时文件夹)中的一个临时文件,path就是这个临时文件在文件系统中的具体位置,由Ruby的Tempfile机制和Rails的上传处理逻辑自动生成。
三、能否自行定义该path?
不能。ActionDispatch::Http::UploadedFile的path是只读属性,它的值由内部维护的临时文件位置决定,无法直接修改。如果需要自定义文件的存储路径,正确的做法是将临时文件复制到你指定的路径(比如Rails.root下的目录),而不是尝试修改这个临时文件的path属性。
内容的提问来源于stack exchange,提问作者Dong Jin
相关产品推荐
相关产品推荐

