在我的 Rails 应用程序中,用户可以上传 Excel 文件。在我的模型中,有一个类 ImportFile 使用attachment_fu,如下所示:
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 任务您可以随时删除所有未使用的文件。
在单个目录中创建大量文件通常是一个坏主意。 Paperclip 有一个路径参数,它将把你的 ID 号码分成几部分,所以记录 #903132 进入 .../90/31/32 例如。
保留一个常规附件,如果他们想丢弃它,删除它,否则使用它。稍后在某个时候清除所有未使用的附件。
关于ruby-on-rails - 如何在 Rails 中通过请求保留临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4195659/