我建议您使用Struts标记而不是普通的HTML标记,并扩展ActionSupport(返回其Result常量,而不是手动组成结果字符串,例如“result”)。
就是说,这是一个 经过测试的有效示例 。
注意:它不适用于旧版本的IE,但是由于您在自己的问题中使用的是HTML5,所以我敢打赌,您已经知道它了,并且您没有针对旧的IE。
JSP
<%@page contentType="text/html; charset=UTF-8" %><!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Multiple File Upload Example</title> </head> <body> <s:form action="upload" enctype="multipart/form-data" > <s:file name="files" multiple="multiple" /> <s:submit value="Upload files" /> </s:form> </body></html>
关于这一
multiple="multiple"部分的注意事项:即使在官方文档中,也
<s:file/>未定义该标记的属性,因为Struts
2.1允许使用该属性,因为
允许的动态属性: true
这意味着它将按 原样
在JSP上绘制,而不受Struts的干扰。这样,Struts不需要在每次HTML5提供新功能时都更新其标签。你可以把
foo="bar"太多的标签,允许动态属性(
<s:file/>,
<s:textarea />等等),你会发现它的HTML。
行动
public class Upload extends ActionSupport{ private List<File> files; private List<String> filesContentType; private List<String> filesFileName; public String execute() throws Exception{ System.out.print("nn---------------------------------------"); int i=0; for (File file : files){ System.out.print("nFile ["+i+"] "); System.out.print("; name:" + filesFileName.get(i)); System.out.print("; contentType: " + filesContentType.get(i)); System.out.print("; length: " + file.length()); i++; } System.out.println("n---------------------------------------n"); return SUCCESS; }}然后,您可能需要设置 Request 的 最大大小以及每个单个文件 的 最大大小:
Struts.xml-最大分段大小:
<constant name="struts.multipart.maxSize" value="20000000" />
Struts.xml-文件的最大大小(全局到软件包,或本地到Action)
<interceptor-ref name="fileUpload"> <param name="maximumSize">10485760</param></interceptor-ref>



