Struts2实现文件上传下载功能(批量上传)
今天来发布一个使用Struts2上传下载的项目,
struts2为文件上传下载提供了好的实现机制,
首先,可以先看一下我的项目截图
关于需要使用的jar包,需要用到commons-fileupload-1.3.1.jar,commons-io-2.2.jar包,有想要的可以联系我,
1. 现在让我们来看一下jsp界面:(使用了js,完成批量上传的功能)
具体代码如下(NewFile.jsp):
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>Insert title here</title> 8 <script type="text/javascript"> 9 function addfile() { 10 var i = document.createElement("input"); 11 i.setAttribute("type","file"); 12 i.setAttribute("name","doc"); 13 14 var d = document.createElement("div"); 15 16 document.getElementById("ll").appendChild(i); 17 document.getElementById("ll").appendChild(d); 18 } 19 </script> 20 </head> 21 <body> 22 <form action="upload" method="post" enctype="multipart/form-data"> 23 <div id="ll"> 24 上传<input type="file" name="doc" /><br/> 25 </div> 26 <a href="javascript:addfile()">继续上传</a> 27 <input type="submit" value="上传" /> 28 </form> 29 </body> 30 </html>
2. form表单提交至upload.action代码如下:
1 package com.llh.action; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.util.Date; 8 import java.util.Random; 9 10 import org.apache.struts2.ServletActionContext; 11 import org.apache.struts2.convention.annotation.Action; 12 import org.apache.struts2.convention.annotation.InterceptorRef; 13 import org.apache.struts2.convention.annotation.Result; 14 15 import com.opensymphony.xwork2.ActionSupport; 16 17 public class UploadAction extends ActionSupport { 18 19 /** 20 * 21 */ 22 private static final long serialVersionUID = 1L; 23 24 private File doc[]; 25 26 private String docFileName[]; 27 28 public File[] getDoc() { 29 return doc; 30 } 31 32 public void setDoc(File[] doc) { 33 this.doc = doc; 34 } 35 36 public String[] getDocFileName() { 37 return docFileName; 38 } 39 40 public void setDocFileName(String[] docFileName) { 41 this.docFileName = docFileName; 42 } 43 44 @Action(value = "upload", interceptorRefs = { @InterceptorRef(value = "fileUpload", params = { "allowedExtensions", 45 ".jpg,.txt", "maximumSize", "2000000" }), @InterceptorRef(value = "defaultStack") }, results = { 46 @Result(name = "success", location = "/success.jsp"), 47 @Result(name = "input", location = "/error.jsp") }) 48 public String execute() { 49 50 for (int i = 0; i < doc.length; i++) { 51 File doc1 = doc[i]; 52 String docFileName1 = docFileName[i]; 53 54 String path = ServletActionContext.getServletContext().getRealPath("/upload/" + changeName(docFileName1)); 55 FileInputStream fis = null; 56 FileOutputStream fos = null; 57 try { 58 fis = new FileInputStream(doc1); 59 fos = new FileOutputStream(path); 60 byte[] b = new byte[1024]; 61 int length = fis.read(b); 62 while (length != -1) { 63 fos.write(b, 0, length); 64 length = fis.read(b); 65 } 66 } catch (IOException e) { 67 // TODO Auto-generated catch block 68 e.printStackTrace(); 69 } finally { 70 try { 71 fis.close(); 72 fos.close(); 73 } catch (IOException e) { 74 // TODO Auto-generated catch block 75 e.printStackTrace(); 76 } 77 } 78 } 79 return SUCCESS; 80 } 81 82 public String changeName(String oldName) { 83 int index = oldName.indexOf("."); 84 String name = oldName.substring(0, index); 85 String extension = oldName.substring(index, oldName.length()); 86 Date d = new Date(); 87 Random r = new Random(); 88 return name + d.getTime() + r.nextInt(999999) + extension; 89 90 } 91 92 }
llh