作为安全措施,浏览器不允许文件上传字段自动恢复。为防止丢失验证文件,请在客户端执行所有验证(尽管您应该始终在服务器上再次验证),以便在一切正确之前永远不会提交表单,或者您必须获取提交的文件第一次并坚持下去,直到表格最终通过并完成所有验证。
在第二种情况下,您有几个选择:
将内容保存在某处,并在您返回表单时返回一个唯一的 ID 指针,该指针将保存在隐藏字段中。您还应该考虑放置一个可见标签,显示已上传的文件。您必须定期清理放弃并稍后回来的用户的上传(因此不会提交具有该相关 ID 的表单供您匹配上传)。
Base64 对上传文件的内容进行编码,并将其返回到隐藏字段中的视图。这会占用更多带宽,但它不需要您在服务器上存储可能永远不会与正确格式相关的文件。您可能还可以在返回的视图中显示相同的图像,因为我相信您可以将 Base64 编码的图像指定为图像标签(或者可能是 CSS 属性)的源。这可能是特定于浏览器的。
只要您的文件上传大小有限(例如 100kb),选项 2 就是我最喜欢的方法。它并不比页面中包含的所有现代 JavaScript 库大多少,并且为用户提供更好的体验,同时让您的服务器在会话、清理或过度处理方面保持沉默。
编辑:许多允许上传图像的网站还提供文件大小验证,如果文件过大,则将其退回。在这种情况下,用户收到他们的资产尚未存储的反馈,您无需对其进行编码和归还。
编辑2:
这是一篇关于浏览器将文件上传控件值字段标记为只读并防止其被 JavaScript 修改(只能通过直接用户操作修改)的帖子。
这是关于直接在 HTML 中使用Base64 编码图像的 SO 评论。提问者正在寻找一种将数据放在单独文件中的方法,但这不是您想要的。'this works' 部分是我在上面的选项 2 中所指的部分。