我建议您使用Struts标记而不是普通的HTML标记,并扩展ActionSupport(返回其Result常量,而不是手动组成结果字符串,例如“result”)。
就是说,这是一个 。
注意:它不适用于旧版本的IE,但是由于您在自己的问题中使用的是HTML5,所以我敢打赌,您已经知道它了,并且您没有针对旧的IE。
<%@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允许使用该属性,因为
允许的动态属性:
这意味着它将按 原样 在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;
/* GETTERS AND SETTERS */
public String execute() throws Exception{
System.out.print("\n\n---------------------------------------");
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;
}
}
然后,您可能需要设置 的 的 :
Struts.xml-最大分段大小:
<constant name="struts.multipart.maxSize" value="20000000" />
Struts.xml-文件的最大大小(全局到软件包,或本地到Action)
<interceptor-ref name="fileUpload">
<param name="maximumSize">10485760</param>
</interceptor-ref>