问题描述
请考虑以下示例:
- 我有一个包含多个文件输入的表单;
- 输入文件使用ActiveStorage和DirectUpload在包含文件后立即自动上传;
- 添加一些文件后,它们会自动上传;
- 我从不单击
submit
按钮,因此这些文件永远不会在任何地方使用或访问;
Rails是否支持某种内置机制来删除这些文件,还是我们必须自己实现一些东西?
更新1
忘记提及我正在使用的示例使用第三方库(在这种情况下为Dropzone),并遵循official documentation中的示例。
根据文件上传后的文档,我们将使用已上传的Blob的ID注入一个隐藏的输入字段。
解决方法
我认为 Chiperific 的回答很好,因为 DirectUpload 在提交中执行,请求失败的时间很少。
我提到请求s是因为据我所知,过程是这样的:
- 用户从他的计算机中选择一个文件并填写其余表格。
- DirectUpload 将文件上传到存储。
- 后端接收正文并更新附件,然后创建或更新模型。
那么,如果文件上传成功但模型验证不成功,会发生什么?你最终会在存储中得到一个没有对应模型或脏模型的文件。
此处的更多信息:https://github.com/rails/rails/issues/31985
答案是否定的,rails 没有自动删除这些文件的机制。我想您可以检查模型创建/更新是否成功,如果没有,请手动删除该文件。
,我认为您的前提不正确。
- 输入文件使用ActiveStorage和DirectUpload在包含文件后立即自动上传文件;
根据the docs:
Active Storage及其随附的JavaScript库支持直接从客户端上传到云。
和
就是这样!上传开始于表单提交。
因此,直接存储的重点似乎是绕过一些Rails ActiveStorage的东西,直接进入服务。但是,直到提交表单后,它仍然不会发生。
the non-edge docs上的示例显示用户在实际上传文件之前单击“提交”。