在Struts 2中上传多个文件

时间:2017-06-22 11:29:27

标签: java file-upload struts2

我有一个javascript,可以将多个文件上传到我的图库系统。单击“开始上传”时,它会在Struts 2的Action类中调用X线程到我的方法。

在这种方法中,我需要验证我的图库是否有空间来接受该文件,为此我将传递给业务对象,然后传递给DAO类。但我的怀疑就在这里......

当我这样做时,我的X线程几乎同时执行验证,但线程1没有完成上传,那么其他线程获得的大小不正确。

有人能给我一些提示吗?

1 个答案:

答案 0 :(得分:0)

  

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

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

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

  

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

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

  

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

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

  

这个拦截器会添加几个字段错误,假设是   行动实施ValidationAware。这些错误消息基于   存储在struts-messages.properties中的几个i18n值,默认值   为所有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" />