Php, Javascript (Dropzone) 如何在上传前将文件保存在临时位置?

Php, Javascript (Dropzone) How to keep files in a temporary place before upload?

我有一个 laravel 申请。我的应用程序中有一个大表格,其中有输入和文件字段。我使用 DropzoneJs 进行文件上传。 首先,用户填写输入并将文件放入 dropzoneJs 区域。然后用户单击提交按钮,所有输入和文件都将发送到服务器。但是这个解决方案有一个问题。如果用户将大文件上传到服务器,则需要花费太多时间。最后用户等待太多。

我该如何防止这种情况发生?使用 dropzoneJs,我可以在 select 时发送文件而无需提交表单。但是如果用户放弃填写表格我该怎么办?因此我无法在数据库中创建新字段。

是否可以在提交表单之前将文件发送到临时位置或图层。当用户 select 文件时,它将文件上传到这一层。如果用户提交表单,文件将转到服务器文件夹,我可以将其保存到数据库。

我不认为它可以按照你想要的方式完成我的意思是文件的 "temporary place",但你可以将图像发送到某种 "temporary" table您的数据库,同时填写表格并在表格中存储该条目的 id

如果提交了表单,只需将图像记录从临时 table 移动到您想要的记录,然后从临时中删除它。

Laravel 存储数据库条目的创建日期,因此您可以检查临时 table 中的旧条目(例如每天一次)并从您的服务器中删除 unwanted/unsubmited 文件和来自您的数据库。

如果你有非常大的文件要上传,那么通常采用的方法是将文件暂时推送到某个云存储(首选是Amazon s3),然后从那里读取。

与上传到您的服务器所花费的时间相比,这通常需要更少的时间。文件上传到 s3 后,您可以将从 s3 生成的 link 存储在您的数据库中,以便稍后访问该文件。

然后让您的应用程序从那里获取它(通过 cron 或守护进程或其他方式)并进行处理。

这是我上传大文件的方法。

希望对您有所帮助!

我通过创建 tmp folder 解决了这个问题。首先,我将文件发送到 tmp folder,如果用户提交我使用 php 的 rename 功能将文件移动到我的 uploads folder。比我将数据保存到数据库。

如果表单失败,这不是问题。因为我设置了每天 cron 来清理我的 tmp folder.