Rails 3 - 将文件上传到公共目录

22

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

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

3个回答

45

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

但你可以仅解析tempfile,这样你就不需要将它复制到公共目录中,而且它会自动删除


非常感谢。事实上,我已经有了那个。我只是不知道一个临时文件已经在我的参数哈希中了。 - smark

3

我收到了一个错误提示,指出“File:Class”没有定义方法“cp”。后来意识到应该按照以下方式进行更新:

file_upload方法的正确代码:

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

4
每次调用该方法时不要执行 require,而是在文件头中执行一次(因为它是 stdlib 的一部分。如果它是 gem,你应该把它放在 gemfile 中)。 - yxhuvud

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接