2017-06-22 79 views
1

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

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

当我这样做时,我的X线程几乎在同一时间执行验证,但线程没有最终确定上传,那么其他线程的大小aren'正确的一个。

任何人都可以给我一些提示吗?

回答

0

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

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

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

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


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

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


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

假设 动作实现了ValidationAware,此拦截器将添加几个字段错误。这些错误消息基于 存储在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" /> 

+0

感谢@Roman C,现在我得到了什么,我需要做的美好憧憬。 – Carol