如何访问通过Ruby on Rails中的表单选择的文件?

时间:2012-10-01 01:15:27

标签: ruby-on-rails ruby

我有以下Ruby代码,它设置一个表单来选择文件:

    <%= form_for :import, :url=>{:controller=>"products", :action=>"import"}, :html => { :multipart => true } do |f| %>
        <div class= "field">
            <%= f.file_field :import %>
            <%= submit_tag 'Import' %>
        </div>

在控制器中,我试图调用从本地驱动器中选择的文件。此行适用于特定文件:

    book = Spreadsheet.open 'c:/source.xls' 

但我不知道如何在控制器中调用从表单中选择的文件。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

文件数据将在params[:import][:import]中,而不在实际文件中。上传文件后,没有类似“c:/ ...”的内容。

如果需要,请打开一个新文件,然后将该数据写入其中。

或者使用像carrierwave这样的东西为你做,并在保存后获取文件的实际路径。

答案 1 :(得分:0)

以下是现在可以使用的代码:

def import

require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'
import_file = params[ :import ][ :import ]
file = FileUploader.new
file.store!(import_file)
book = Spreadsheet.open "#{file.store_path}"
sheet1 = book.worksheet 0
sheet1.each 1 do |row|
@product = Product.new(:code => row[0], :name => row[1], :status => row[2], :account => current_user.account).save

答案 2 :(得分:0)

使用以下插件之一处理文件上传。

attachement_fupaperclip

这是关于paperclip http://railscasts.com/episodes/134-paperclip的railscast的教程,这是一个附带教程http://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu