Enrique Moreno Tent
Enrique Moreno Tent

Reputation: 25237

Rails 4 - Creating a folder inside public, to store uploaded files

This is the sample in the documentation for Rails, when saving uploaded files.

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

This works alright, but what if I wanted to create a unique folder, for every upload made?

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

Upvotes: 2

Views: 4870

Answers (2)

Emiliano Della Casa
Emiliano Della Casa

Reputation: 906

Just create the directory if missing, then add it to 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

Upvotes: 8

Diego Polido Santana
Diego Polido Santana

Reputation: 1435

Couldn't you consider to use Carrierwave or Paperclip to upload your files? These gems are very easy to use.

Upvotes: 1

Related Questions