Как загрузить текстовый файл и проанализировать содержимое в базе данных в RoR

На данный момент мне удалось загрузить файл:

<code># In new.html.erb
<%= file_field_tag 'upload[file]' %>
</code>

И получить доступ к файлу в контроллере

<code># In controller#create
@text = params[:upload][:file]
</code>

Однако это дает мне только имя файла, а не содержимое файла. Как мне получить доступ к его содержимому?

Я знаю, что это скачок, но как только я смогу получить доступ к содержимому файла, можно ли будет загрузить папку и просмотреть файлы?

Ответы на вопрос(2)

Complete Example

к примеру, загрузку файла импорта, содержащего контакты. Вам не нужно хранить этот файл импорта, просто обработайте его и удалите.

Routes

routes.rb

resources :contacts do 
  collection do
    get 'import/new', to: :new_import  # import_new_contacts_path

    post :import                       # import_contacts_path
  end
end
Form

views/contacts/new_import.html.erb

<%= form_for @contacts, url: import_contacts_path, html: { multipart: true } do |f| %>

  <%= f.file_field :import_file %>

<% end %>
Controller

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
Contact Model

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

Надеюсь, это поможет!

Джошуа

 17 нояб. 2017 г., 20:39
Просто возвращаюсь, чтобы подумать об этом. Я полагаю, что не важно хранить важный файл вообще, даже временно, потому что, если что-то пойдет не так с импортом, им все равно придется повторно импортировать новый фиксированный файл ...

<%= form_tag '/controller/method_name', :multipart => true do %>
   <label for="file">Upload text File</label> <%= file_field_tag "file" %>
   <%= submit_tag %>
<% end %>

В контроллере # method_name

uploaded_file = params[:file]
file_content = uploaded_file.read
puts file_content

см. больше для загрузки файла в рельсыhttp://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm Как прочитать весь файл в Ruby?

Надеюсь, что это поможет вам.

 nate05 мая 2012 г., 09:56
@novemberkilo Это позволит мне только добавлять файлы .html, и я получаю ту же неопределенную ошибку метода с файлами .html. Suvankar, я уже установил и требовал open-uri в этом контроллере. Есть идеи, что еще я мог сделать?
 03 мая 2012 г., 14:08
Попробуйте это с опцией: accept, например file_field_tag & quot; file & apos ;,: accept = & gt; & APOS; текст / HTML & APOS;
 nate03 мая 2012 г., 12:33
Это дает мне ошибку:undefined method 'read' for "myfile.txt":String
 05 мая 2012 г., 13:29
если загрузка файла работает должным образом, он может загрузить любой файл. Вы пропустили & multipost = & gt; Истинные & APOS ;? увидеть большеtutorialspoint.com/ruby-on-rails/rails-file-uploading.htm
 04 мая 2012 г., 17:35
просто установите oen-uri с помощью этой команды: $ sudo gem install open-uri

Ваш ответ на вопрос