我有一个包含两个输入的表单:一个字符串,一个文件。
<form:form ...>
<form:input type="text" ....>
<form:input type="file" ....>
</form:form>
如果字符串输入验证失败, Controller 将路由回同一 View 。发生这种情况时,字符串字段会保留,但所选文件会丢失。
有没有办法在重新渲染 View 时保留选择的文件?
我认为答案是否定的 - 它是 HTML 文件输入的固有特性,而不是服务器端框架。询问我是否遗漏了什么。
最佳答案
确实是文件输入值无法保存。这就像在所有浏览器中实现的一样。据我所知,它与潜在的安全风险有关,但我从未深入探讨过。
虽然有可能实现类似的目标。这是我们在项目中所做的:
- 每个带有 fileupload 的表单都有一个 UUID,只要输入无效,该 UUID 就不会更改。
- 我们在这些编辑阶段使用 FineUploader 异步上传文件,这些文件上传到一个以这个 uuid 作为文件夹名的文件夹
- 我们维护隐藏的输入(文本)并引用当前上传
- 如果没有绑定(bind)结果错误,我们会以一种方法处理文件,并在完成后删除上传文件夹
- 如果出现错误,我们会保留 uuid 并维护输入字段,这样我们就不会丢失引用。
这现在工作稳定,作为一个很好的副作用, Controller 在某种程度上更容易编写,在我看来也更容易编写,因为我们不再需要这些表单的 multipart,而另一个 Controller 只处理上传。
编辑: - 您可能想要实现一个 cronjob 来清除放弃的上传!
关于html - 保留 <form :input type ="file"> with Spring MVC 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15510807/