从ActiveStorage + DirectUpload中删除未使用的文件

问题描述

请考虑以下示例:

  1. 我有一个包含多个文件输入的表单;
  2. 输入文件使用ActiveStorage和DirectUpload在包含文件后立即自动上传
  3. 添加一些文件后,它们会自动上传
  4. 我从不单击submit按钮,因此这些文件永远不会在任何地方使用或访问;

Rails是否支持某种内置机制来删除这些文件,还是我们必须自己实现一些东西?

通过连续上传文件直到出现问题来执行DoS似乎微不足道。

更新1

忘记提及我正在使用的示例使用第三方库(在这种情况下为Dropzone),并遵循official documentation中的示例。

根据文件上传后的文档,我们将使用已上传的Blob的ID注入一个隐藏的输入字段。

解决方法

我认为 Chiperific 的回答很好,因为 DirectUpload 在提交中执行,请求失败的时间很少。

我提到请求s是因为据我所知,过程是这样的:

  1. 用户从他的计算机中选择一个文件并填写其余表格。
  2. DirectUpload 将文件上传到存储。
  3. 后端接收正文并更新附件,然后创建或更新模型。

那么,如果文件上传成功但模型验证不成功,会发生什么?你最终会在存储中得到一个没有对应模型或脏模型的文件。

此处的更多信息:https://github.com/rails/rails/issues/31985

答案是否定的,rails 没有自动删除这些文件的机制。我想您可以检查模型创建/更新是否成功,如果没有,请手动删除该文件。

,

我认为您的前提不正确。

  1. 输入文件使用ActiveStorage和DirectUpload在包含文件后立即自动上传文件;

根据the docs

Active Storage及其随附的JavaScript库支持直接从客户端上传到云。

就是这样!上传开始于表单提交。

因此,直接存储的重点似乎是绕过一些Rails ActiveStorage的东西,直接进入服务。但是,直到提交表单后,它仍然不会发生。

the non-edge docs上的示例显示用户在实际上传文件之前单击“提交”。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...