6

我有一个带有两个输入的表单:一个字符串,一个文件。

<form:form ...>
  <form:input type="text" ....>
  <form:input type="file" ....>
</form:form>

如果对字符串输入的验证失败,控制器将路由回同一视图。发生这种情况时,字符串字段会被保留,但所选文件会丢失。

有没有办法在重新渲染视图时保留选定的文件?

认为答案是否定的——它是 HTML 文件输入所固有的,而不是服务器端框架。询问是否有我遗漏的东西。

4

1 回答 1

6

确实无法保留文件输入值。就像它在所有浏览器中实现的一样。据我所知,这与潜在的安全风险有关,但我从未深入。

不过,有可能实现类似的目标。这是我们在项目中所做的:

  • 每个带有 fileupload 的表单都有一个 UUID,只要输入无效,该 UUID 就不会改变。
  • 在这些编辑阶段,我们使用 FineUploader 异步上传文件,该文件上传到以该 uuid 作为文件夹名称的文件夹
  • 我们通过引用当前上传来维护隐藏的输入(文本)
  • 如果没有绑定结果错误,我们会在一个方法中处理文件,并在完成时删除上传文件夹
  • 如果出现错误,我们会保留 uuid 并维护输入字段,这样我们就不会丢失引用。

这现在工作稳定,作为一个很好的副作用,控制器在某种程度上更容易,在我看来也更干净,因为我们不再需要这些表单的 multipart 并且另一个控制器只处理上传。

编辑:-您可能想要实施一个 cronjob 来清除放弃的上传!

于 2013-03-20T06:06:28.057 回答