我正在构建一个传统的服务器呈现的HTML应用程序(在PHP之上使用Statamic),它允许用户创建想法。他们访问Create Idea表单,填写一些问题,然后单击“提交”。一旦他们这样做,表单就会向服务器发送POST
请求,然后服务器会保存数据,为该想法生成ID(和slug)。
我现在想让用户上传文件作为他们想法的一部分。当然,传统的方法是将文件输入添加到表单中,然后立即提交所有内容(数据和文件)。服务器可以创建一个ID,然后将文件与ID相关联。
然而,这种方法有一些缺点,尤其是在表单提交过程中必须等待文件上传的所有延迟。更新的现实实现似乎在添加文件后立即上传(例如,通过拖放)。例如,我已将FilePond确定为领跑者,否则我可能会使用Dropzone.js。
但是,如果浏览器在用户提交表单之前发送文件,我该如何才能最好地将文件与表单数据相关联?我还没有使用ID。
这必须是一个已解决的问题。但我无法通过谷歌找到任何最佳实践,因此这个问题。我可能遇到的解决方案:
我倾向于解决方案1,但想看看我可能没想到的东西。 2由于令人困惑的用户体验并不是很好,而且3似乎也不太理想,例如因为我最终可能会保存用户从未实际保存过自己(并放弃)的草案提示,部分原因是因为生成的slug可能是基于标题丢失或不完整,因为用户可能在上传文件之前没有完成标题字段。
答案 0 :(得分:1)
这是我的建议:
然后创建一个cronjob,每小时左右删除一次所有未使用的文件。
答案 1 :(得分:0)
事实上,FilePond的文档有description of a recommended setup:
使用FilePond异步上传文件称为处理。简而言之,FilePond将文件发送到服务器并期望服务器返回唯一的文件ID。然后,此唯一ID用于恢复上传或稍后恢复之前的上传。
随着时间的推移描述上传过程:
- 客户端使用POST请求将文件my-file.jpg上传为multipart / form-data
- 服务器将文件保存到唯一位置tmp / 12345 / my-file.jpg
- 服务器在text / plain response
中返回唯一位置ID 12345- 客户端将唯一ID 12345存储在隐藏的输入字段中
- 客户端提交包含具有唯一ID
的隐藏输入字段的FilePond父表单- 服务器使用唯一ID将tmp / 12345 / my-file.jpg移动到其最终位置并删除tmp / 12345文件夹
醇>