Rails 4 - 在public中创建一个文件夹,用于存储上传的文件

Enr*_*ent 2 ruby-on-rails ruby-on-rails-4

这是保存上传文件时Rails文档中的示例.

def upload
  uploaded_io = params[:person][:picture]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
    file.write(uploaded_io.read)
  end
end
Run Code Online (Sandbox Code Playgroud)

这项工作正常,但如果我想为每次上传创建一个独特的文件夹,该怎么办?

def upload

  // How to add this to the path of the saved file??
  uid = Digest::SHA1.hexdigest([Time.now, rand].join)


  uploaded_io = params[:person][:picture]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
    file.write(uploaded_io.read)
  end


end
Run Code Online (Sandbox Code Playgroud)

Emi*_*asa 7

只需创建目录(如果缺少),然后将其添加到 File.open

dir = Rails.root.join('public', 'uploads', uid)
Dir.mkdir(dir) unless Dir.exist?(dir)
File.open(dir.join(uploaded_io.original_filename), 'wb') do |file|
  file.write(uploaded_io.read)
end
Run Code Online (Sandbox Code Playgroud)