So far I've managed to upload a file:
# In new.html.erb
<%= file_field_tag 'upload[file]' %>
And access the file in the controller
# In controller#create
@text = params[:upload][:file]
However, this gives me just the filename, not the file's contents. How do I access its contents?
I know this a jump, but once I can access the file's contents, would it all be possible to upload a folder and iterate through the files?
Take, for example, uploading an import file containing contacts. You don't need to store this import file, just process it and discard it.
routes.rb
resources :contacts do
collection do
get 'import/new', to: :new_import # import_new_contacts_path
post :import # import_contacts_path
end
end
views/contacts/new_import.html.erb
<%= form_for @contacts, url: import_contacts_path, html: { multipart: true } do |f| %>
<%= f.file_field :import_file %>
<% end %>
controllers/contacts_controller.rb
def new_import
end
def import
begin
Contact.import( params[:contacts][:import_file] )
flash[:success] = "<strong>Contacts Imported!</strong>"
redirect_to contacts_path
rescue => exception
flash[:error] = "There was a problem importing that contacts file.<br>
<strong>#{exception.message}</strong><br>"
redirect_to import_new_contacts_path
end
end
models/contact.rb
def import import_file
File.foreach( import_file.path ).with_index do |line, index|
# Process each line.
# For any errors just raise an error with a message like this:
# raise "There is a duplicate in row #{index + 1}."
# And your controller will redirect the user and show a flash message.
end
end
Hope that helps!
Joshua
In new.html.erb
<%= form_tag '/controller/method_name', :multipart => true do %>
<label for="file">Upload text File</label> <%= file_field_tag "file" %>
<%= submit_tag %>
<% end %>
In controller#method_name
uploaded_file = params[:file]
file_content = uploaded_file.read
puts file_content
see more for file upload in rails http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm How to read whole file in Ruby?
Hope this will help you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With