我有一个 JavaScript 可以将文件多次上传到我的画廊系统。
单击按钮时,它会在Struts 2 类中start upload
调用多个线程到我的方法。Action
在这种方法中,我需要验证我的画廊系统是否有空间来接受文件(为此我使用了一个业务对象,然后是一个 DAO 类)。
但我的问题是:
当我这样做时,我的动作线程几乎同时执行验证,但如果线程一个没有完成上传,那么其他线程的大小就不正确了。
如何在 Struts 2 中进行多文件上传?
我有一个 JavaScript 可以将文件多次上传到我的画廊系统。
单击按钮时,它会在Struts 2 类中start upload
调用多个线程到我的方法。Action
在这种方法中,我需要验证我的画廊系统是否有空间来接受文件(为此我使用了一个业务对象,然后是一个 DAO 类)。
但我的问题是:
当我这样做时,我的动作线程几乎同时执行验证,但如果线程一个没有完成上传,那么其他线程的大小就不正确了。
如何在 Struts 2 中进行多文件上传?
Struts 2 框架为处理符合 RFC 1867 的文件上传提供了内置支持。
您不需要使用多个请求/线程来上传多个文件。每个请求都作为单个文件上传处理,同时使用 Web 服务器的线程池。服务器正在为来自任何客户端的每个请求选择一个线程。因此,如果您通过单个文件上传上传多个文件,您将无法控制处理所有文件所需的空间。由于系统无法接受文件,任何单个文件上传都可能失败,并且与特定客户端无关。
如果您需要一次上传所有多个文件,那么您应该使用Multiple File Uploading。
如上一节所述,上传多个文件的一种技术是简单地拥有多个文件类型的表单输入元素,它们都具有不同的名称。这将需要一些 setter 方法,这些方法等于上传文件数量的 3 倍。另一种选择是使用
Arrays
orjava.util.Lists
。
您可以配置fileUpload
拦截器以限制上传文件的大小
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" />