Struts文件长传

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'fileUpLoad.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 27 <!-- method="post" enctype="multipart/from-data"必须这样的 --> 28 <form action="FileUpload" method="post" enctype="multipart/form-data"> 29 username:<input type="text" name="username"><br> 30 file:<input type="file" name="file"><br> 31 <input type="submit" value="submit"> 32 </form> 33 </body> 34 </html>
FileUpload.action

1 package fileupload; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 9 import org.apache.struts2.ServletActionContext; 10 11 import com.opensymphony.xwork2.ActionSupport; 12 13 public class FileUpload extends ActionSupport 14 { 15 private String username; 16 private File file; 17 private String fileContentType; 18 private String fileFileName; 19 public String getUsername() 20 { 21 return username; 22 } 23 public void setUsername(String username) 24 { 25 this.username = username; 26 } 27 public File getFile() 28 { 29 return file; 30 } 31 public void setFile(File file) 32 { 33 this.file = file; 34 } 35 public String getFileContentType() 36 { 37 return fileContentType; 38 } 39 public void setFileContentType(String fileContentType) 40 { 41 this.fileContentType = fileContentType; 42 } 43 public String getFileFileName() 44 { 45 return fileFileName; 46 } 47 public void setFileFileName(String fileFileName) 48 { 49 this.fileFileName = fileFileName; 50 } 51 52 @Override 53 public String execute() throws Exception 54 { 55 String root = ServletActionContext.getRequest().getRealPath("/upload"); 56 System.out.println("存储的路径是:" + root); 57 InputStream in = new FileInputStream(file); 58 System.out.println(fileFileName); 59 File file2 = new File(root,fileFileName); 60 OutputStream os = new FileOutputStream(file2); 61 int length = 0; 62 byte[] buffer = new byte[400]; 63 while(-1!=(length = in.read(buffer))) 64 { 65 os.write(buffer, 0, length); 66 } 67 in.close(); 68 os.close(); 69 70 return SUCCESS; 71 } 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 }
这里的三个属性要注意
private File file;
private String fileContentType;
private String fileFileName; 这三个属性分别得是用来封装 上传文件 名字 类型的。
名字都是固定的,再表单里要上传的File的名字是什么就因该命名为什么 例如 :file:<input type="file" name="abc"><br>,
则三个属性的名为为:
private File abc;
private String abcContentType;
private String abcFileName;
最后莫忘记再struts.xml配置action信息
1 <action name="FileUpload" class="fileupload.FileUpload"> 2 <result name="success"> 3 /FileUpLoadResult.jsp 4 </result> 5 </action>
FileUpLoadResult.jsp页面展示文件名以及文件类型。
<s:property value="fileFileName"/><br>
<s:property value = "fileContentType"/>
多个文件长传与上面的单个文件上传的方式相差无几,就是把封装文件,文件名,文件雷系的三个的属性改为LIST

1 package fileupload; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 import java.util.List; 9 10 import org.apache.struts2.ServletActionContext; 11 12 import com.opensymphony.xwork2.ActionSupport; 13 14 public class MultiFileUpLoad extends ActionSupport 15 { 16 /** 17 * 18 */ 19 private static final long serialVersionUID = 3691843913552291529L; 20 private String username; 21 private List<File> file; 22 private List<String> fileFileName; 23 private List<String> fileContentType; 24 public String getUsername() 25 { 26 return username; 27 } 28 public void setUsername(String username) 29 { 30 this.username = username; 31 } 32 public List<File> getFile() 33 { 34 return file; 35 } 36 public void setFile(List<File> file) 37 { 38 this.file = file; 39 } 40 public List<String> getFileFileName() 41 { 42 return fileFileName; 43 } 44 public void setFileFileName(List<String> fileFileName) 45 { 46 this.fileFileName = fileFileName; 47 } 48 public List<String> getFileContentType() 49 { 50 return fileContentType; 51 } 52 public void setFileContentType(List<String> fileContentType) 53 { 54 this.fileContentType = fileContentType; 55 } 56 57 @Override 58 public String execute() throws Exception 59 { 60 String root = ServletActionContext.getRequest().getRealPath("/upload"); 61 62 for(int i = 0;i<file.size();i++) 63 { 64 File out = new File(root,fileFileName.get(i)); 65 InputStream in = new FileInputStream(file.get(i)); 66 OutputStream os = new FileOutputStream(out); 67 byte[] b = new byte[400]; 68 int length = 0; 69 while(-1!=(length = in.read(b))) 70 { 71 os.write(b, 0, length); 72 } 73 os.close(); 74 in.close(); 75 } 76 77 return SUCCESS; 78 } 79 }
结果页的展示与上面一样
莫忘记配置struts.xml
1 <action name="multlfileupload" class="fileupload.MultiFileUpLoad"> 2 <result name="success"> 3 /FileUpLoadResult.jsp 4 </result> 5 <interceptor-ref name="fileUpload"> 6 <param name="maximumSize">99999999999</param> 7 </interceptor-ref> 8 <interceptor-ref name="defaultStack"></interceptor-ref> 9 </action>
5 <interceptor-ref name="fileUpload"> struts 再处理文件上传的拦截器 fileUpload 可去strurs-....core.jar 中查看下源码
6 <param name="maximumSize">99999999999</param> 制定默认上传问价大小的最大值。 7 </interceptor-ref> 8 <interceptor-ref name="defaultStack"></interceptor-ref>