上傳java
一、編寫上傳action類 UploadAction.javaapache
1 package jxf.b_upload; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 import javax.servlet.http.HttpServletRequest; 7 8 import org.apache.commons.io.FileUtils; 9 import org.apache.struts2.ServletActionContext; 10 11 public class UploadAction { 12 public File file01;//上傳的文件 --對應表單中的<input type="file" name="file01"> name的值 13 public String file01FileName;//上傳文件的文件名 --表單中name的值+FileName 14 public String file01ContentType;// 上傳文件的文件的類型(MIME) --表單中name的值+ContentType 15 16 public void setFile01(File file01) { 17 this.file01 = file01; 18 } 19 20 public void setFile01FileName(String file01FileName) { 21 this.file01FileName = file01FileName; 22 } 23 24 public void setFileContentType(String file01ContentType) { 25 this.file01ContentType = file01ContentType; 26 } 27 28 /** 29 * 上傳 30 * @return 31 */ 32 public String upload() { 33 //處理文件 把文件上傳到upload目錄 34 try { 35 //建立目標文件 36 File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName); 37 //拷貝上傳的文件到目標文件 38 FileUtils.copyFile(file01, destFile); 39 System.out.println("上傳完成"); 40 } catch (IOException e) { 41 e.printStackTrace(); 42 throw new RuntimeException(e); 43 } 44 return "success"; 45 } 46 }
二、配置文件數組
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- struts默認的上傳文件大小限制是2M,可經過常量的配置來改變 --> <constant name="struts.multipart.maxSize" value="10485760"></constant> <package name="upload_" extends="struts-default"> <action name="uploadTest" class="jxf.b_upload.UploadAction" method="upload"> <!-- 限制運行上傳的文件的類型 --> <interceptor-ref name="defaultStack"> <!-- 限制運行的文件的擴展名 <param name="fileUpload.allowedExtensions">txt,jpg,jar</param> --> <!-- 限制運行的類型 【與上面同時使用,取交集】 <param name="fileUpload.allowedTypes">text/plain</param> --> </interceptor-ref> <!-- 錯誤視圖 --> <result name="input">/error.jsp</result> <result name="success">/index.jsp</result> </action> </package> </struts>
三、前臺jsp頁面瀏覽器
<body> <form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data"> <input type="file" name="file01"> <input type="submit" value="上傳"> </form> </body>
若是是多文件上傳,能夠使用同名的<input type="file" name="">標籤,並在action處理類中用數組接收(固然也能夠用不一樣的name值,並用對應的字段接收),而後遍歷處理app
1 public class UploadAction { 2 public File[] file01;//上傳的文件 --對應表單中的<input type="file" name="file01"> name的值 3 public String[] file01FileName;//上傳文件的文件名 --表單中name的值+FileName 4 public String[] file01ContentType;// 上傳文件的文件的類型(MIME) --表單中name的值+ContentType 5 6 public void setFile01(File[] file01) { 7 this.file01 = file01; 8 } 9 10 public void setFile01FileName(String[] file01FileName) { 11 this.file01FileName = file01FileName; 12 } 13 14 public void setFileContentType(String[] file01ContentType) { 15 this.file01ContentType = file01ContentType; 16 } 17 18 /** 19 * 上傳 20 * @return 21 */ 22 public String upload() { 23 //處理文件 把文件上傳到upload目錄 24 try { 25 //建立目標文件 26 for (int i = 0; i < file01.length; i++) { 27 File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName[i]); 28 //拷貝上傳的文件到目標文件 29 FileUtils.copyFile(file01[i], destFile); 30 System.out.println("上傳完成"); 31 } 32 33 } catch (IOException e) { 34 e.printStackTrace(); 35 throw new RuntimeException(e); 36 } 37 return "success"; 38 } 39 }
<form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data"> <input type="file" name="file01"> <input type="file" name="file01"> <input type="file" name="file01"> <input type="submit" value="上傳"> </form>
下載:jsp
一、編寫下載acton類 DownAction.javapost
1 package jxf.b_upload; 2 3 import java.io.File; 4 import java.io.InputStream; 5 import java.io.UnsupportedEncodingException; 6 import java.net.URLEncoder; 7 import java.util.Map; 8 9 import org.apache.struts2.ServletActionContext; 10 11 import com.opensymphony.xwork2.ActionContext; 12 13 public class DownAction { 14 15 /** 16 * 1. 顯示全部要下載文件的列表 17 * @return 18 */ 19 public String list(){ 20 //獲取全部要下載的文件 21 File file = new File(ServletActionContext.getServletContext().getRealPath("/upload")); 22 String[] fileNames = file.list();//全部文件名 23 ActionContext ac = ActionContext.getContext(); 24 Map<String,Object> request = ac.getContextMap(); 25 request.put("fileNames", fileNames);//將文件名放入request 26 return "list"; 27 } 28 29 /*************2. 文件下載*********************/ 30 // 1. 獲取要下載的文件的文件名 31 private String fileName;//對應提交的參數名 32 public void setFileName(String fileName) { 33 // 處理傳入的參數中問題(get提交) 34 try { 35 fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8"); 36 } catch (UnsupportedEncodingException e) { 37 throw new RuntimeException(e); 38 } 39 // 把處理好的文件名,賦值 40 this.fileName = fileName; 41 } 42 43 //2. 下載提交的業務方法 (在struts.xml中配置返回stream) 44 public String down() throws Exception { 45 return "success"; 46 } 47 48 // 3. 返回文件流的方法 49 public InputStream getAttrInputStream(){ 50 return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName); 51 } 52 53 // 4. 下載顯示的文件名(瀏覽器顯示的文件名) 54 public String getDownFileName() { 55 // 須要進行中文編碼 56 try { 57 fileName = URLEncoder.encode(fileName, "UTF-8"); 58 } catch (UnsupportedEncodingException e) { 59 throw new RuntimeException(e); 60 } 61 return fileName; 62 } 63 64 }
二、配置文件this
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="down_" extends="struts-default"> <action name="downlist" class="jxf.b_upload.DownAction" method="list"> <result name="list">/down.jsp</result> </action> <action name="down_down" class="jxf.b_upload.DownAction" method="down"> <result name="success" type="stream"> <!-- 運行下載的文件的類型:指定爲全部的二進制文件類型 --> <param name="contentType">application/octet-stream</param> <!-- 對應的是Action中屬性: 返回流的屬性【其實就是getAttrInputStream()】 --> <param name="inputName">attrInputStream</param> <!-- 下載頭,包括:瀏覽器顯示的文件名 ${downFileName},${}爲struts中的取值符,downFileName對應getDownFileName()--> <param name="contentDisposition">attachment;filename=${downFileName}</param> <!-- 緩衝區大小設置 --> <param name="bufferSize">1024</param> </result> </action> </package> </struts>
三、下載列表jsp編碼
<body> <table border="1" align="center"> <tr> <td>序號</td> <td>文件名</td> <td>操做</td> </tr> <c:forEach var="item" items="${fileNames}" varStatus="sta"> <tr> <td>${sta.count}</td> <td>${item}</td> <td> <c:url var="url" value="down_down"> <c:param name="fileName" value="${item}"></c:param> </c:url> <a href="${url}">下載</a> </td> </tr> </c:forEach> </table> </body>
下載編寫方式比較特殊,並不容易記憶,此處記錄方便之後用到查閱。url