我需要同时使用Struts2的上传“1000个文件”或“一个zip文件,包括所有文件”。 (1000个文件或压缩文件,我的意思是我需要的所有文件,在系统上上传,如果用户选择所有的1000个文件一次或压缩它们并上传的单个文件也没关系,所以我要寻找在其中一个更容易实现,更高效)
我已阅读下面的答案,但他们都不适合的目的。
- Struts2的文件上传
- 如何选择并上传多个文件与HTML和PHP,使用HTTP POST?
使用下面的代码,当我用一个简单的列表文件; 它显示列表的名称,但是当我使用列表文件它不显示任何东西,我不能上传文件。
upload.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple/>
<button type="submit"/>
</form>
</body>
</html>
upload.java
@Action
public class upload implements Addresses {
private List <File> files = new ArrayList <File> ();
public String execute(){
return "success";
}
public upload() {
System.out.println("in upload 1");
for(int i=0;i<files.size();i++)
System.out.println(i + ")" + files.get(i));
System.out.println("in upload 2");
}
public List <File> getFiles() {
return files;
}
public void setFiles(List <File> files) {
this.files = files;
for(int i=0;i<files.size();i++)
System.out.println(i + ")" + files.get(i));
// File fileToCreate = new File("c:\image", files.get(i).toString());
// FileUtils.copyFile(files.get(i), fileToCreate);
}
}
产量
in upload 1
in upload 2
我建议你使用Struts的标签,而不是普通的HTML标签,并延长了ActionSupport(手动返回其结果,而不是常量构成的结果字符串,如“结果”)。
也就是说,这是一个测试和工作的例子 。
注意:它不会在旧版本的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它是允许的,因为
动态属性允许: 真
这意味着它将在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>
在JSP文件: -
<form action="doUpload" enctype="multipart/form-data" method="post">
<s:file name="fileUpload" multiple="multiple" label="Pick files" size="30"/>
<br/>
<s:submit value="Upload All" />
</form>
在java文件
private File fileUpload[];
private String fileUploadFileName[];
private String fileUploadContentType[];
private String saveDirectory;
/** setter and getter for all above variables**/
public String doUpload1()throws Exception{
for (int i=0; i<fileUpload.length;i++){
File uploadedFile = fileUpload[i];
String fileName = fileUploadFileName[i];
File destFile = new File(saveDirectory + File.separator + fileName);
try {
FileUtils.copyFile(uploadedFile, destFile);
} catch (IOException ex) {
System.out.println("Could not copy file " + fileName);
ex.printStackTrace();
}
}
return "success";
}
这是一个为我工作,希望能够为您服务,请让我知道如果任何问题。