我试图将CSV文件上传到我的控制器并访问其中的数据。
下面是Controller的代码:class DatabaseImporterController < ApplicationController
def index
end
def import
# Receive the uploaded CSV file and import to the database.
csv_file = params[:csv_file]
logger.debug { csv_file.inspect }
#CSV.foreach("parse.csv") do |row|
#end
render :template => "database_importer/index"
end
end
logger.debug
的输出:
{"utf8"=>"✓",
"authenticity_token"=>"Z4+XlmrcH+8JPL6Yq52ymVOMfiGEI9mN8LuoxoBLp8M=",
"csv_file"=>#<ActionDispatch::Http::UploadedFile:0x007feca81b3fb8 @original_filename="Install-Linux-tar.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name="csv_file"; filename="Install-Linux-tar.txt"rnContent-Type: text/plainrn", @tempfile=#<File:/tmp/RackMultipart20121229-10294-1ngf634>>,
"commit"=>"Import CSV Car Database",
"controller"=>"database_importer",
"action"=>"import"}
根据官方Ruby on Rails页面上的文档:
params散列中的对象是IO的一个子类的实例。根据上传文件的大小,它实际上可能是一个StringIO或一个由临时文件支持的file实例。
据我所知,上传的文件在我的光盘(在我的Heroku实例中)的某个地方,我可以临时访问它。
如何访问该文件?我尝试了以下操作,得到了错误信息:
csv_file = params[:csv_file][:tempfile] # This is how I try to get the file page of the temporary file.
undefined method `[]' for #<ActionDispatch::Http::UploadedFile:0x007fecb02103c8>
您要呼叫tempfile
,而不是[:tempfile]
:
params[:csv_file].tempfile
您可以在ActionDispatch::Http::UploadedFile
的文档中看到所有可用的方法。