我有一个javascript,可以将多个文件上传到我的图库系统。单击“开始上传”时,它会在Struts 2的Action类中调用X线程到我的方法。
在这种方法中,我需要验证我的图库是否有空间来接受该文件,为此我将传递给业务对象,然后传递给DAO类。但我的怀疑就在这里......
当我这样做时,我的X线程几乎同时执行验证,但线程1没有完成上传,那么其他线程获得的大小不正确。
有人能给我一些提示吗?
答案 0 :(得分:0)
Struts 2框架为处理符合RFC 1867的文件上载提供了内置支持。
您不需要使用多个请求/线程来上传多个文件。每个请求都作为单个文件上载处理,并同时使用Web服务器的线程池。服务器正在从任何客户端的每个请求中选择一个线程。因此,如果您通过单个文件上载上载多个文件,则无法控制处理所有文件所需的空间。由于系统无法接受该文件而导致任何单个文件上载可能会失败,并且它与特定客户端无关。
如果您需要一次上传所有多个文件,则应使用Multiple File Uploading。
如前一节所述,上传多个文件的一种技术是简单地使用类型为file的多个表单输入元素,这些元素都具有不同的名称。这将需要许多setter方法,这些方法等于上载文件数量的3倍。另一种选择是使用
Arrays
或java.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" />