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

标签 ruby-on-rails wizard temporary-files

在我的 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/

相关文章:

c++ - 在 Qt Creator 新项目向导的自定义模板中创建类?

c - tmpfile 中的安全漏洞是什么,tmpfile_s 是如何解决的?

visual-studio-2008 - 如何删除 Visual Studio 2008 中生成的所有二进制文件

mysql - 毫秒转换并获取年份

ruby-on-rails - rails : how to load 2 models via join?

ruby-on-rails - has_many :through in fixtures in rails 3. 1

windows-installer - Visual Studio 2005 安装向导 - 为所有用户创建桌面快捷方式

ruby-on-rails - 按正则表达式模式搜索 ActiveRecord

Angular4向导第一个文本字段专注于下一步

go - 如何将临时文件作为命令行参数传递