【问题标题】:Prepopulate file upload form in struts 2在struts 2中预填充文件上传表单
【发布时间】:2011-07-20 19:44:29
【问题描述】:

我正在开发一个 struts 2 web 应用程序,用户可以通过文件上传表单上传文件,如果文件已存在于数据库中,则应显示确认消息以覆盖现有文件或取消操作。

在上传时查询数据库以获取该文件,如果存在,则操作结果并在会话中设置一个标志,该标志显示 jquery 对话框以供用户确认。我需要在对话框中实现继续按钮,它将设置另一个标志来指定覆盖并再次调用相同的操作,这次文件将被上传。为了实现这一点,我需要在调用上传操作之前使用先前的请求参数预填充文件上传输入框。

还有其他方法可以实现上述要求吗?

如果需要任何详细信息,请告诉我。

提前致谢。

【问题讨论】:

  • 据我所知,您不能在任何浏览器中使用用户驱动器中的文件预先填写文件输入框,因为这可能会导致一些严重的安全问题。请参阅stackoverflow.com/questions/4684013/… 将文件获取到您的服务器并保存为临时文件。

标签: struts2


【解决方案1】:

如果数据库中存在具有相同文件名的文件,我假设您不想上传文件。如果是这种情况,为什么不在选择要上传的文件后立即检查文件名的重复性。这可以通过两种方式完成

  1. 与页面一起加载所有文件名的列表并使用此列表检查选定的文件名
  2. 使用 ajax 在选择文件时将请求发送到服务器以检查重复文件名

你可以使用file元素的onchange事件

出于安全原因,您不能以编程方式弄乱file 元素的value 属性,否则您可以填写用户系统中的任何文件并提交表单

【讨论】:

  • 非常糟糕的解决方案是加载所有文件名,第二个听起来不错的解决方案。
  • 是的,但在我的应用程序中,我必须检查患者病例中是否存在重复的文件名(图像)。并且每个案例不能有超过 5 个图像,所以在这种情况下,这不是一个坏主意
  • 感谢您的回复,实际上是否上传文件是根据文件内容决定的,所以直到文件上传后才能决定。但是,我已经放弃尝试预填充文件上传字段,而是正在研究将先前上传的文件存储在临时目录中并将请求中的文件名传递给 JSP 的方法。如果用户选择覆盖,临时文件将被上传。感谢您的 cmets。
  • 接受的答案,因为操纵文件上传字段的值不是实现解决方案的正确方法,也不可能:)
【解决方案2】:

您可以在发送请求之前通过复选框询问是否覆盖文件是否存在来获得用户确认。然后在你的行动中做你的 IO 工作。

但是,如果您仍然想在发送请求后显示确认,我建议您使用自定义拦截器,在用户确认和文件存在的条件下传递请求。如果检查未通过,您可以返回自定义结果作为确认部分并重新提交请求。只是一个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多