【问题标题】:How to upload multiple files in Struts 2 [closed]如何在 Struts 2 中上传多个文件 [关闭]
【发布时间】:2017-06-22 11:29:26
【问题描述】:

我有一个 JavaScript 可以将多个文件上传到我的画廊系统。

当单击按钮start upload 时,它会调用多个线程到我在Struts 2 的Action 类中的方法。

在这种方法中,我需要验证我的画廊系统是否有空间来接受文件(为此我使用了一个业务对象,然后是一个 DAO 类)。

但我的问题是:

当我这样做时,我的动作线程几乎同时执行验证,但如果线程一个没有完成上传,那么其他线程的大小就不正确了。

如何在 Struts 2 中进行多文件上传?

【问题讨论】:

    标签: java file-upload struts2 multiple-file-upload


    【解决方案1】:

    Struts 2 框架为处理符合 RFC 1867 的文件上传提供内置支持。

    您不需要使用多个请求/线程来上传多个文件。每个请求都作为单个文件上传处理,同时使用 Web 服务器的线程池。服务器正在为来自任何客户端的每个请求选择一个线程。因此,如果您通过单个文件上传上传多个文件,您将无法控制处理所有文件所需的空间。任何单个文件上传都可能由于系统无法接受文件而失败,并且与特定客户端无关。

    如果您需要一次上传所有多个文件,那么您应该使用Multiple File Uploading

    如上一节所述,上传多个文件的一种技术是简单地拥有多个文件类型的表单输入元素,它们都具有不同的名称。这将需要一些 setter 方法,这些方法等于上传文件数量的 3 倍。另一种选择是使用Arraysjava.util.Lists


    你可以配置fileUpload interceptor来限制上传文件的大小

    maximumSize(可选)- 最大大小(以字节为单位) 拦截器将允许在操作上设置文件引用。笔记, 这与中发现的各种属性无关 struts.properties。默认为大约 2MB。


    然后你可以配置从拦截器返回的自定义消息。

    这个拦截器会添加几个字段错误,假设 动作实现ValidationAware。这些错误消息基于 几个 i18n 值存储在struts-messages.properties,默认值 为所有 i18n 请求处理的 i18n 文件。您可以覆盖文本 通过为以下键提供文本来查看这些消息:

    • struts.messages.error.uploading - 无法上传文件时发生的一般错误

    • struts.messages.error.file.too.large - 上传文件过大时发生

    • struts.messages.error.content.type.not.allowed - 当上传的文件与指定的预期内容类型不匹配时发生

    • struts.messages.error.file.extension.not.allowed - 当上传的文件与指定的预期文件扩展名不匹配时发生


    单个请求上传多个文件。要控制请求的总大小,您可以使用常量或属性struts.multipart.maxSize。例如,常量将每个请求的限制设置为 1M。

    <constant name="struts.multipart.maxSize" value="1000000" />
    

    【讨论】:

    • 感谢@Roman C,现在我对需要做的事情有了更好的认识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多