【发布时间】:2016-10-04 10:48:03
【问题描述】:
使用Laravel 5.2,我正在制作一个上传表单,该表单应该允许用户选择最多 10 张图像,显示他们的预览,然后让他对它们进行排序,添加更多图像或删除他不想要的图像上传。
预览的排序和删除可以很容易地使用 javascript 完成,但除此之外,我很难弄清楚如何正确地完成其余的工作。我最初的想法是从输入中获取 js 文件数组,将其移动到另一个数组并在用户与图像预览交互后使用它,这将使用FileReader 显示。
一旦他提交表单,我将创建一个FormData 对象,删除输入中的当前文件并添加所有有效文件:
var formdata = new FormData(document.getElementById('upload-form'));
if (formdata.has('pic[]') && validFiles.length) {
formdata.delete("pic[]");
var len = validFiles.length;
for (i = 0; i < len; i++) {
formdata.append("pic[]", validFiles[i]);
}
}
如果您熟悉 js,您已经可以看到这种方法在向后兼容性方面存在严重问题,因为旧版浏览器(包括 Chrome 50 及以下或几乎任何 IE。)
好吧,放弃这个想法。我的第二个想法是执行以下操作:
- 用户选择要添加的图片
- 使用 ajax 上传上述图片,并使用 Laravel 将它们临时存储在某处
- 返回图片预览
- 让用户使用预览来重新排序文件或删除它们并跟踪他所做的事情。
- 提交表单后,获取所有其他信息,确定哪些文件要永久存储,哪些文件要删除和保存。
现在我不太确定该怎么做。我在想我可以为这些图像创建一个 tmp 目录,生成某种字符串作为与用户会话关联的目录的名称,将文件存储在那里并使用 Session 保存目录名称。
问题在于Session 似乎有一个全局超时,并且不能设置为在 15 分钟内到期。我看到的另一个问题是,一旦Session 到期并且用户决定不上传图像,他们将永远留在服务器上,因为我找不到允许我在Session 到期时执行代码的方法。
那么在 Laravel 中进行临时文件存储的正确方法是什么? 或者我在这里走错了方向,你能找到更好的方法来做我想做的事情吗?
提前感谢您的任何建议。
【问题讨论】: