【发布时间】:2018-11-08 05:46:26
【问题描述】:
我正在构建一个传统的服务器呈现的 HTML 应用程序(在 PHP 之上使用 Statamic),它可以让用户产生想法。他们访问 Create Idea 表单,填写一些问题,然后单击提交。一旦他们这样做了,表单就会向服务器发送一个POST 请求,然后服务器会保存数据,为这个想法生成一个 ID(和 slug)。
我现在想让用户上传文件作为他们想法的一部分。当然,执行此操作的老式方法是将文件输入添加到表单中,然后一次性提交所有内容(数据和文件)。服务器可以创建一个 ID,然后将文件与 ID 相关联。
但是,这种方法有一些缺点,尤其是在表单提交过程中必须等待文件上传的延迟。更现代的实现似乎会在添加文件后立即上传文件(例如,通过拖放)。例如,我已将FilePond 确定为领先者,否则我可能会使用Dropzone.js。
但是,如果浏览器在用户提交表单之前发送文件,我怎样才能最好地将文件与表单数据相关联?我还没有要使用的 ID。
这一定是一个已解决的问题。但我无法通过谷歌找到任何最佳实践,因此这个问题。我想到的可能解决方案:
- 生成一个 GUID 作为表单的一部分。与任何文件上传一起提交。如果最终提交表单,请将其保存(作为隐藏字段)作为表单数据的一部分。
- 要求用户在启用文件上传之前提交表单(保存草稿)。显然不是很好的用户体验。
- 作为上述 2) 的变体,在用户开始上传文件之前的某个时间点通过 Ajax 自动提交表单。
我倾向于解决方案 1,但想看看我可能没有想到的。 2 不是很好,因为 UX 令人困惑,而 3 似乎也不太理想,例如因为我最终可能会保存用户从未真正保存自己(并放弃)的草稿,部分原因是生成的 slug 可能是基于缺少或不完整的标题,因为用户在上传文件之前可能没有完成标题字段。
【问题讨论】:
-
我的建议:立即上传文件(验证后..),在数据库的“文件”表中输入路径/文件名和唯一令牌,将其发送回您的表单并提交它与表格。 (然后创建一个删除所有未使用文件的 cronjob)
-
谢谢@Jeff,这听起来是个聪明的方法!如果您想将此添加为答案,那么您目前正在努力争取令人垂涎的正确答案状态:)
标签: javascript php forms file-upload statamic