当前位置: 代码迷 >> JavaScript >> Php,Javascript(Dropzone)如何在上传之前将文件保存在临时位置?
  详细解决方案

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

热度:127   发布时间:2023-06-05 11:54:17.0

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

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

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

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

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

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

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

然后让你的应用程序从那里(通过cron或守护进程或其他东西)接收它并进行处理。

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

希望这可以帮助!

我不认为它可以像你想要的那样用文件的“临时位置”来表示,但是你可以在填写表格和存储该条目的id的同时将图像发送到数据库中的某种“临时”表在形式。

如果表单已被提交,则只需将图像记录从临时表移动到您想要的表,并从临时表中删除它。

Laravel存储数据库条目的创建日期,因此您可以检查临时表中的旧条目(例如每天一次),并从服务器和数据库中删除不需要/未提供的文件。

  相关解决方案