使用Spring MVC保留<form:input type =“file”>的值</form:input>

时间:2013-03-19 21:30:04

标签: html spring spring-mvc file-upload

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

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

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

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

认为答案是否定的 - 并且它是HTML文件输入的固有内容,而不是服务器端框架。询问是否有我遗失的事情。

1 个答案:

答案 0 :(得分:6)

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

虽然有可能实现类似的目标。这就是我们在项目中所做的:

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

这现在稳定工作,并且作为一个很好的副作用,控制器在某种程度上更容易,在我看来也更清晰,因为我们不再需要这些形式的多部分和另一个控制器只是处理上传。

编辑: - 您可能希望实现一个cronjob来清除已弃用的上传内容!