如何在Rails中保留临时文件?

时间:2010-11-16 15:18:33

标签: ruby-on-rails wizard temporary-files

在我的Rails应用程序中,用户可以上传Excel文件。在我的模型中有一个使用attachment_fu的类ImportFile,如下所示:

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

当用户点击“添加文件”时,他进入一个包含&lt;%= fields.file_field:uploaded_data%&gt;的页面。 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

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

有没有人提示如何实现这个目标?或者可以指出我上传预览文件的场景就像我预设的那样?我一直在寻找好几天,但我找不到。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

相关问题