gpt4 book ai didi

ruby-on-rails - 如何在两个操作之间保留临时文件

转载 作者:行者123 更新时间:2023-12-04 04:32:59 24 4
gpt4 key购买 nike

我的应用程序在 Heroku 上,我正在通过导入 Excel 创建资源

我的应用程序的用户可以从 Excel 电子表格中导入联系人。进行导入的过程有多个步骤,以使用户更容易理解。第一步,他们上传一个文件(电子表格)。在第二步中,他们选择一些选项来处理文件。这两个步骤不能合二为一,因为选项取决于文件的标题。

现在,这是通过两个操作完成的:一个 POST 上传文件,然后另一个 POST 上传用户的选择。实例化为 Tempfile 的文件不会在操作中持久保存。

所以,我不希望用户在中间操作中再次上传第一个文件。这可能吗?

第一步:

= simple_form_for [:choose_headers, @contact_import] do |f|
= f.input :file, as: :file
= f.submit

在第二步中,文件不会被持久化:
= simple_form_for [@contact_import] do |f|
= f.input :file, as: :file
= f.input :some_other_input
= f.submit

最佳答案

不要使用 Tempfile .为上传的数据生成您自己的唯一文件名,并将文件保存在特殊目录中。 (如果您使用 Capistrano 进行部署,我会将上传目录放在 shared 下部署在生产中。在 config/deploy.rb 中,我将添加一个部署 Hook ,如果上传目录不存在,则创建它。然后我将使用 config/environments/production.rbconfig/environments/development.rb 中的配置值指定上传目录的相对路径,因此一切都在开发和生产中无缝运行。在我的 Controller 操作中,我会执行类似 File.join(Rails.root, UPLOAD_PATH, filename) 的操作来构建正确的路径对于上传的文件。)

将生成的文件名保存在数据库中,并在用户返回第二步时检索它。另外,添加自定义 rake清理从未使用过的旧上传的任务,在生产中,从 cron 运行该任务工作。 (我推荐使用 whenever gem 来配置你的 cron 工作。)

关于ruby-on-rails - 如何在两个操作之间保留临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20248520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com