【问题标题】:Spring 3 MVC File Upload and Form Validation without losing the fileSpring 3 MVC 文件上传和表单验证而不丢失文件
【发布时间】:2011-07-27 11:40:11
【问题描述】:

是否有适用于 Spring 3 和 JSP 的小型框架,允许对包含普通字段和文件上传的表单进行服务器端表单验证,从而能够“拒绝”请求而不会丢失上传的文件?

更详细: 我有一个包含普通输入字段和文件上传字段的 HTML 表单。此表单的验证在服务器端完成(在客户端进行验证很复杂)。如果表单数据正确,则没有问题。 但是用户发送了一个无效的表单然后我需要再次显示表单,用户更正输入并再次发送表单。这很好除了用户需要再次输入(并上传)文件这一事实。 -- 一般的解决方案很简单:我需要将文件存储在服务器端,如果用户再次发送更正的数据,我需要使用这个已经上传的文件。 -- 但即使不是那么复杂,它也是很多工作,我不想重新发明轮子。

所以我的问题是,是否有任何小框架可以实现此功能,我可以将其添加到我的应用程序中?

(目前我使用的是:Spring 3.0、JSP、Dojo)

【问题讨论】:

  • 为什么不在 2 个不同的 ajax 调用中分离文件上传和表单验证?因此文件上传字段将在用户选择文件作为 ajax 调用后直接上传文件,而“提交”按钮将提交其他表单字段进行验证。
  • 此外,dojo 有 dojo.io.iframe 用于通过 ajax 上传文件,看起来实验性 dojox 包有一个 dojox.form.FileUploader 类也可能有所帮助。
  • @Dzhu ajax 不是真正的选择,因为应用程序应该在没有的情况下工作,所以 JavaScript 和 Ajax 只允许用于额外的可用性功能,但核心必须在没有的情况下工作。 -- 所以有人可以说这个上传的东西是一个附加功能,但事实并非如此。 -- 无论如何谢谢你的想法
  • 好吧,我不知道有任何现有的库可以处理这种情况。但它很容易实现:在提交表单(上传文件)后将文件保存到 tmp 目录,给它一个唯一的名称,例如使用java.util.UUID,将路径保存在Session或spring Model对象中,让jsp知道文件的UUID,当表单更新重发时,可以使用UUID文件名查找文件。跨度>
  • @Dzhu:如果用户从不提交表单或关闭会话,不要忘记删除文件,在表单中显示上传的文件等等......我告诉它不难, 但工作量很大

标签: java javascript spring jsp


【解决方案1】:

您真正需要做的就是保存文件并将其与会话相关联,而不是依赖自动或注入验证,这会拒绝请求而不允许您先保存文件 - 编程验证。保存与会话(或用户,例如,如果使用 Spring Security)有某种关联的文件,以便在以后的请求中使用它。

但是:所需的解决方案需要您对文件进行一些脱机清理。我有类似的情况,其中一个进程创建了一个(永久)“临时”表。创建表后,我启动了一个使用 @Async 注释的表观察程序进程,该进程循环并使线程休眠一个小时,检查表是否仍然存在(它在在线进程结束时被删除)。如果一个小时后该表仍然存在,则异步线程将其删除并退出。在您的情况下,您需要确定 1)要检查什么以查看用户是否已完成该过程,以及 2)检查多长时间。

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2012-04-10
    • 2016-06-08
    • 2014-10-17
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多