问题描述
我有一个laravel应用程序。 我的应用程序中有一个很大的表单,里面有输入和文件字段。 我使用DropzoneJs进行文件上传。 首先,用户填写输入并将文件放入dropzoneJs区域。 比用户点击提交按钮,所有输入和文件都转到服务器。 但是这个解决方案存在问题。 如果用户将大文件上传到服务器,则需要花费太多时间。 并且用户最后等待太多。
我该如何防止这种情况? 使用dropzoneJs我可以在我选择时发送文件而不提交表单。 但是,如果用户放弃填写表格,我会怎么做? 因此,我无法在数据库中创建新字段。
是否可以在提交表单之前将文件发送到临时位置或图层。 当用户选择文件时,它会将文件上传到该层。 如果用户提交表单,文件将转到服务器文件夹,我可以将其保存到数据库。
1楼
Tolga Ate?
2
已采纳
2015-08-14 19:12:01
我通过创建tmp folder
解决了这个问题。
首先,我发送文件到tmp folder
比用户提交我使用php的rename
功能将文件移动到我的uploads folder
。
比我将数据持久化到数据库。
如果表单失败,那不是问题。
因为我设置了每日cron
来清理我的tmp folder.
2楼
Ymartin
1
2015-07-31 15:09:00
如果您要上传非常大的文件,那么通常采用的方法是暂时将文件推送到某个云存储(最优选的选项是Amazon s3),然后从那里读取。
与上传到服务器所用的时间相比,这通常需要更少的时间。 将文件上载到s3后,您可以将从s3生成的链接存储在数据库中以便稍后访问该文件。
然后让你的应用程序从那里(通过cron或守护进程或其他东西)接收它并进行处理。
这是我上传大文件的方法。
希望这可以帮助!
3楼
violator667
0
2015-07-31 09:06:21
我不认为它可以像你想要的那样用文件的“临时位置”来表示,但是你可以在填写表格和存储该条目的id
的同时将图像发送到数据库中的某种“临时”表在形式。
如果表单已被提交,则只需将图像记录从临时表移动到您想要的表,并从临时表中删除它。
Laravel存储数据库条目的创建日期,因此您可以检查临时表中的旧条目(例如每天一次),并从服务器和数据库中删除不需要/未提供的文件。