Как разобрать содержимое загруженного файла в RoR - PullRequest
3 голосов
/ 12 июля 2010

Я новичок в Rails.В моем проекте, где пользователи должны загрузить файл, я сохраняю его, затем мне нужно проанализировать содержимое файла и показать его в новой форме.

Я успешно завершил загрузку файла, теперь как мне прочитать его содержимое?

Ответы [ 3 ]

5 голосов
/ 12 июля 2010

Попробуйте что-то вроде этого:

upload = params[:your_upload_form_element]
content = upload.is_a?(StringIO) ? upload.read : File.read(upload.local_path)

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

2 голосов
/ 12 июля 2010

Вы можете открывать файлы и читать их содержимое в Ruby, используя класс File , как показано в этом простом примере:

# Open a file in read-only mode and print each line to the console
file = File.open('afile.txt', 'r') do |f|
  f.each do |line|
    puts line
  end
end
0 голосов
/ 03 июля 2015

Полный пример

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

Маршруты

rout.rb

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

    post :import, on: :collection      # 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

Надежда, которая помогает другим!

JP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...