如何在Rails中通过请求保留临时文件?

问题描述:

在我的Rails应用程序中,用户可以上传Excel文件。在我的模型存在使用attachment_fu像这样一类的importfile:如何在Rails中通过请求保留临时文件?

class ImportFile < ActiveRecord::Base 
    has_attachment :storage => :file_system, :path_prefix => 'public/imports', :max_size => 10.megabytes 
end 

当用户点击“添加文件”,他进入一个网页,一个<%= fields.file_field:uploaded_data%>。 attachment_fu做它的工作和文件上传正在完成(让我们省略验证问题)。我想保留这个文件以备将来使用,将上传的文件复制到其他临时文件中。临时文件工作正常 - 我可以在磁盘上看到它。

def self.write_to_tmp(data) 
    temp_file = Tempfile.new("import", "#{Rails.root}/tmp") 
    begin 
    temp_file.write(data) 
    ensure 
    temp_file.close(false) 
    end 
    temp_file 
end 

我想要做的是显示用户预览,然后让他选择,如果他想添加一个文件或放弃它 - 有两个按钮。当用户选择保存文件时,我遇到了问题,因为上面刚创建的临时文件已经消失。它在请求前被删除。

有没有人有提示如何实现这个?或者可以指向我上传与预览文件场景,就像我已经预见的那样?我一直在寻找几天,但我没有找到一个。

这种事最可靠的方法是创建一个简单的“上传”跟踪模型,就像你在那里,但使用Paperclip来代替。这可以配置为处理大量的文件。

您需要实际保存这些记录以使它们在请求之间保持不变。这将导致孤立的记录,但是一个简单的cron作业或rake任务可以在任何需要的时候关闭所有未使用的文件。

在单个目录中创建大量文件通常是一个坏主意。回形针有一个路径参数,将您的ID号分成几部分,所以记录#903132进入.../90/31/32例如。

保留常规附件,如果他们想丢弃它,请将其删除,否则使用它。稍后清理掉所有未使用的附件。

+0

感谢您的提示 - 这很有帮助。如果我决定拥有一些孤儿记录,我不必切换到Paperclip,因为attachment_fu也是。 – 2010-11-16 20:52:55