2011-04-25 58 views
21

我正在寻找一种上传文件(一个xml文件)到Rails 3的公共目录的简单方法。一旦它在那里,我想打开它,解析内容并删除之后的文件。Rails 3 - 将文件上传到公共目录

每当我搜索文件上传时,我都会遇到Paperclip。但我不想将该文件与对象关联。我只想上传它。最简单的方法是什么?

回答

43

a。表格

<%= form_for :file_upload, :html => {:multipart => true} do |f| %> 
    <%= f.file_field :my_file %> 
    <%= f.submit "Upload" %> 
<% end %> 

b。控制器

def file_upload 
    require 'fileutils' 
    tmp = params[:file_upload][:my_file].tempfile 
    file = File.join("public", params[:file_upload][:my_file].original_filename) 
    FileUtils.cp tmp.path, file 
    ... # YOUR PARSING JOB 
    FileUtils.rm file 
end 

但是你可以分析只是临时文件,所以你不需要把它复制到公共目录,它会自动删除

+0

非常感谢。事实上,我已经有了。我只是不知道临时文件已经在我的params散列中。 – smark 2011-04-26 08:21:54

3

我收到指示“未定义的方法`CP”文件的错误:类”。意识到如下这实际上应该被更新:对于file_uplad方法

权代码:

def file_upload 
    tmp = params[:file_upload][:my_file].tempfile 
    require 'ftools' 
    file = File.join("public", params[:file_upload][:my_file].original_filename) 
    FileUtils.cp tmp.path, file 
end 
+3

呃。每次调用方法时不要执行require - 在文件头中执行一次(因为它是stdlib的一部分,如果它是一个gem,则应该将它放在gemfile中) – yxhuvud 2012-01-24 16:36:49

-1
img = params[:user][:photo] 
File.open(Rails.root.join('public','uploads',img.original_filename),'wb') do |file| file.write(img.read)