Servlet文件的上傳、下載

  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 src="common/js/jquery.js" type="text/javascript"></script>  
  9. <script src="common/js/ajaxfileupload.js" type="text/javascript"></script>  
  10. <script>  
  11. /** 利用ajax方式上傳文件 **/   
  12. function uploadFile(){   
  13.     $.ajaxFileUpload({   
  14.         url : 'TestServlet?action=upload',   
  15.         secureuri : false,   
  16.         fileElementId : 'fileC',   
  17.         dataType: 'text',   
  18.         success : function(data,status){   
  19.             if(data.indexOf("上傳文件失敗!")==-1){   
  20.                 var oldFileName = data.split("|")[0];   
  21.                 var newFileName = data.split("|")[1];   
  22.                 var fileListValue = $("#uploadFileList").html();   
  23.                 var obj = $("#uploadFileList");   
  24.                 var content = fileListValue+"<span id='fileList"+newFileName+"'><br/><a href=\"javascript:downLoadFile('"+data+"')\">"+oldFileName+"</a>&nbsp;&nbsp<img src='common/images/X.gif' onClick=\"deleteFile('"+newFileName+"')\" /></span>";   
  25.                 obj.html(content);   
  26.             }   
  27.         },   
  28.         error: function (data, status, e)             //至關於java中catch語句塊的用法   
  29.         {   
  30.             alert("上傳文件失敗!");   
  31.         }   
  32.     });   
  33. }   
  34.   
  35. /** 刪除上傳的文件 **/   
  36. function deleteFile(fileName){   
  37.     $.ajax({      
  38.         type : "post",      
  39.         url : "TestServlet?action=deleteFile",     
  40.         data : "fileName="+fileName,      
  41.         success:function(msg){   
  42.             alert(msg);   
  43.             if(msg == "刪除成功!"){   
  44.                 var t = "fileList"+fileName;   
  45.                 var ttt = document.getElementById(t);   
  46.                 ttt.innerHTML = "";   
  47.             }     
  48.         }   
  49.     })    
  50. }   
  51.   
  52. /** 下載文件 **/   
  53. function downLoadFile(fileName){   
  54.     window.location.href = "TestServlet?action=downLoadFile&fileName="+encodeURIComponent(encodeURIComponent(fileName));   
  55. }   
  56. </script>  
  57. </head>  
  58. <body>  
  59. <form name="frm" id="frm"  method="POST" enctype="multipart/form-data">  
  60. <input type="file" name="fileC" id="fileC" style="width:400px;height:25px"/>  
  61. <input type="button" name="upload" id="upload" value="上傳文件" onClick="uploadFile()"/>  
  62. <br/><span id="uploadFileList"></span>  
  63. </form>  
  64. </body>  
  65. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="common/js/jquery.js" type="text/javascript"></script>
<script src="common/js/ajaxfileupload.js" type="text/javascript"></script>
<script>
/** 利用ajax方式上傳文件 **/
function uploadFile(){
	$.ajaxFileUpload({
		url : 'TestServlet?action=upload',
		secureuri : false,
		fileElementId : 'fileC',
		dataType: 'text',
		success : function(data,status){
			if(data.indexOf("上傳文件失敗!")==-1){
				var oldFileName = data.split("|")[0];
				var newFileName = data.split("|")[1];
				var fileListValue = $("#uploadFileList").html();
				var obj = $("#uploadFileList");
				var content = fileListValue+"<span id='fileList"+newFileName+"'><br/><a href=\"javascript:downLoadFile('"+data+"')\">"+oldFileName+"</a>&nbsp;&nbsp<img src='common/images/X.gif' onClick=\"deleteFile('"+newFileName+"')\" /></span>";
				obj.html(content);
			}
		},
	    error: function (data, status, e)             //至關於java中catch語句塊的用法
	    {
	    	alert("上傳文件失敗!");
	    }
	});
}

/** 刪除上傳的文件 **/
function deleteFile(fileName){
	$.ajax({   
	    type : "post",   
	    url : "TestServlet?action=deleteFile",  
	    data : "fileName="+fileName,   
	    success:function(msg){
	  		alert(msg);
	  		if(msg == "刪除成功!"){
	  			var t = "fileList"+fileName;
	  			var ttt = document.getElementById(t);
	  			ttt.innerHTML = "";
	  		}  
	    }
	}) 
}

/** 下載文件 **/
function downLoadFile(fileName){
	window.location.href = "TestServlet?action=downLoadFile&fileName="+encodeURIComponent(encodeURIComponent(fileName));
}
</script>
</head>
<body>
<form name="frm" id="frm"  method="POST" enctype="multipart/form-data">
<input type="file" name="fileC" id="fileC" style="width:400px;height:25px"/>
<input type="button" name="upload" id="upload" value="上傳文件" onClick="uploadFile()"/>
<br/><span id="uploadFileList"></span>
</form>
</body>
</html>

 

  1. import java.io.BufferedInputStream;   
  2. import java.io.File;   
  3. import java.io.FileInputStream;   
  4. import java.io.IOException;   
  5. import java.io.OutputStream;   
  6. import java.text.SimpleDateFormat;   
  7. import java.util.Date;   
  8. import java.util.Iterator;   
  9. import java.util.List;   
  10.   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.http.HttpServlet;   
  13. import javax.servlet.http.HttpServletRequest;   
  14. import javax.servlet.http.HttpServletResponse;   
  15.   
  16. import org.apache.commons.fileupload.FileItem;   
  17. import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
  18. import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  19.   
  20. public class TestServlet extends HttpServlet {   
  21.     public TestServlet() {   
  22.         super();   
  23.     }   
  24.   
  25.     public void destroy() {   
  26.         super.destroy(); // Just puts "destroy" string in log   
  27.     }   
  28.   
  29.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  30.             throws ServletException, IOException {   
  31.         doPost(request, response);   
  32.     }   
  33.   
  34.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
  35.             throws ServletException, IOException {   
  36.         response.setContentType("text/html;charset=utf-8");// 設置編碼方式,保證返回到前臺中文不亂碼   
  37.         request.setCharacterEncoding("UTF-8");// 設置編碼方式,保證從前臺到後臺中文不亂碼   
  38.         response.setCharacterEncoding("UTF-8");   
  39.         String action = request.getParameter("action");   
  40.         if (action.equals("upload")) {   
  41.             upload(request, response);   
  42.         } else if (action.equals("deleteFile")) {   
  43.             deleteFile(request, response);   
  44.         } else if(action.equals("downLoadFile")){   
  45.             downLoadFile(request, response);   
  46.         }   
  47.     }   
  48.   
  49.     public void init() throws ServletException {   
  50.         // Put your code here   
  51.     }   
  52.   
  53.     /**  
  54.      * 上傳文件  
  55.      *   
  56.      * @param request  
  57.      * @param response  
  58.      * @throws ServletException  
  59.      * @throws IOException  
  60.      */  
  61.     public void upload(HttpServletRequest request, HttpServletResponse response)   
  62.             throws ServletException, IOException {   
  63.         String result = "";   
  64.         try {   
  65.             result = UpFile(request);   
  66.         } catch (Exception e) {   
  67.             // TODO Auto-generated catch block   
  68.             e.printStackTrace();   
  69.             result = "上傳文件失敗!";   
  70.         }   
  71.         System.out.println(result);   
  72.         response.getWriter().print(result);   
  73.     }   
  74.   
  75.     /**  
  76.      * 刪除上傳的文件  
  77.      *   
  78.      * @param request  
  79.      * @param response  
  80.      * @throws ServletException  
  81.      * @throws IOException  
  82.      */  
  83.     public void deleteFile(HttpServletRequest request,   
  84.             HttpServletResponse response) throws ServletException, IOException {   
  85.         String result = "";   
  86.         String fileName = request.getParameter("fileName");   
  87.         try {   
  88.             boolean b = false;   
  89.             b = deleteFileDao(fileName);   
  90.             if (b) {   
  91.                 result = "刪除成功!";   
  92.             } else {   
  93.                 result = "刪除失敗!";   
  94.             }   
  95.         } catch (Exception e) {   
  96.             // TODO Auto-generated catch block   
  97.             e.printStackTrace();   
  98.             result = "刪除文件失敗!";   
  99.         }   
  100.         response.getWriter().print(result);   
  101.     }   
  102.        
  103.     /**  
  104.      * 下載文件  
  105.      * @param request  
  106.      * @param response  
  107.      * @throws ServletException  
  108.      * @throws IOException  
  109.      */  
  110.     public void downLoadFile(HttpServletRequest request,   
  111.             HttpServletResponse response) throws ServletException, IOException {   
  112.         String fileName = java.net.URLDecoder.decode(request.getParameter("fileName"),"UTF-8");//後臺轉編碼一次成中文   
  113.         String[] fileNameAll = fileName.split("\\|");   
  114.         String oldFileName = fileNameAll[0];   
  115.         String newFileName = fileNameAll[1];   
  116.         String filePath = this.getServletConfig().getServletContext().getRealPath("/");   
  117.         File file = new File(filePath + "uploaded\\" + newFileName);   
  118.         response.setContentType("application/x-msdownload");   
  119.         response.setContentLength((int) file.length());   
  120.         response.setHeader("Content-Disposition""attachment;filename=" + new String(oldFileName.getBytes("GBK"), "ISO8859_1"));//保證另存爲文件名爲中文   
  121.         FileInputStream fis = new FileInputStream(file);   
  122.         BufferedInputStream bis = new BufferedInputStream(fis);   
  123.         byte[] b = new byte[1024];   
  124.         long k = 0;   
  125.   
  126.         OutputStream out = response.getOutputStream();   
  127.         while (k < file.length()) {   
  128.             int j = bis.read(b, 01024);   
  129.             k += j;   
  130.             out.write(b, 0, j);   
  131.         }   
  132.         out.close();   
  133.         bis.close();   
  134.         fis.close();   
  135.     }   
  136.   
  137.   
  138.     /**  
  139.      * 上傳文件  
  140.      *   
  141.      * @param req  
  142.      * @return  
  143.      * @throws Exception  
  144.      */  
  145.     public String UpFile(HttpServletRequest req) throws Exception {// 上傳文件   
  146.     // req.setCharacterEncoding("UTF-8");//設置編碼方式,讓上傳的文件(中文)不會出現亂碼   
  147.         String fileName = "";   
  148.         String filePath = this.getServletConfig().getServletContext()   
  149.                 .getRealPath("/");   
  150.         File saveDir = new File(filePath + "uploaded");   
  151.         if (!saveDir.isDirectory()) {   
  152.             saveDir.mkdir();   
  153.         }   
  154.         DiskFileItemFactory dff = new DiskFileItemFactory();// 建立該對象   
  155.         dff.setRepository(saveDir);// 指定上傳文件的臨時目錄   
  156.         dff.setSizeThreshold(1024000);// 指定在內存中緩存數據大小,單位爲byte   
  157.         ServletFileUpload sfu = new ServletFileUpload(dff);// 建立該對象   
  158.         sfu.setSizeMax(50000000);// 指定單個上傳文件的最大尺寸   
  159.         List items = sfu.parseRequest(req);// 解析request //   
  160.         // 請求,並返回FileItemIterator集合   
  161.         Iterator iter = items.iterator();   
  162.         while (iter.hasNext()) {   
  163.             FileItem fis = (FileItem) iter.next();// 從集合中得到一個文件流   
  164.             if (!fis.isFormField()) {// 過濾掉表單中非文件域   
  165.                 fileName = fis.getName().substring(   
  166.                         fis.getName().lastIndexOf("\\") + 1);// 得到上傳文件的文件名   
  167.                 String hzm = fileName.substring(fileName.indexOf('.'));// 獲取文件的後綴名   
  168.                 String nameString = getNewFileName() + hzm;// 新生成的文件名稱   
  169.                 fis.write(new File(saveDir + "\\" + nameString));   
  170.                 fileName = fileName + "|" + nameString;   
  171.             }   
  172.         }   
  173.         return fileName;   
  174.     }   
  175.   
  176.     /**  
  177.      * 刪除文件  
  178.      *   
  179.      * @param fileName  
  180.      * @return  
  181.      */  
  182.     public boolean deleteFileDao(String fileName) {   
  183.         boolean b = false;   
  184.         String filePath = this.getServletConfig().getServletContext()   
  185.                 .getRealPath("/");   
  186.         File file = new File(filePath + "uploaded\\" + fileName);   
  187.         if (file.exists()) {   
  188.             file.delete();   
  189.             b = true;   
  190.         }   
  191.         return b;   
  192.     }   
  193.   
  194.     /**  
  195.      * 生成新文件名稱(年月日時分秒+二位隨機碼)  
  196.      *   
  197.      * @return  
  198.      */  
  199.     public String getNewFileName() {   
  200.         String newFileName = "";   
  201.         Date date = new Date();   
  202.         SimpleDateFormat simpleDateFormat = new SimpleDateFormat(   
  203.                 "yyyyMMddHHmmss");   
  204.         newFileName = simpleDateFormat.format(date);   
  205.         String random = getRandom(2);   
  206.         return newFileName + random;   
  207.     }   
  208.   
  209.     /**  
  210.      * 獲取n位隨機數  
  211.      *   
  212.      * @param n  
  213.      * @return  
  214.      */  
  215.     public String getRandom(int n) {   
  216.         String randomString = "";   
  217.         if (n == 1) {   
  218.             randomString = (int) (Math.random() * 10) + "";   
  219.         } else {   
  220.             randomString = getRandom(n - 1) + (int) (Math.random() * 10);   
  221.         }   
  222.         return randomString;   
  223.     }   
  224. }  
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class TestServlet extends HttpServlet {
	public TestServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");// 設置編碼方式,保證返回到前臺中文不亂碼
		request.setCharacterEncoding("UTF-8");// 設置編碼方式,保證從前臺到後臺中文不亂碼
		response.setCharacterEncoding("UTF-8");
		String action = request.getParameter("action");
		if (action.equals("upload")) {
			upload(request, response);
		} else if (action.equals("deleteFile")) {
			deleteFile(request, response);
		} else if(action.equals("downLoadFile")){
			downLoadFile(request, response);
		}
	}

	public void init() throws ServletException {
		// Put your code here
	}

	/**
	 * 上傳文件
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void upload(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String result = "";
		try {
			result = UpFile(request);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			result = "上傳文件失敗!";
		}
		System.out.println(result);
		response.getWriter().print(result);
	}

	/**
	 * 刪除上傳的文件
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void deleteFile(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String result = "";
		String fileName = request.getParameter("fileName");
		try {
			boolean b = false;
			b = deleteFileDao(fileName);
			if (b) {
				result = "刪除成功!";
			} else {
				result = "刪除失敗!";
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			result = "刪除文件失敗!";
		}
		response.getWriter().print(result);
	}
	
	/**
	 * 下載文件
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void downLoadFile(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String fileName = java.net.URLDecoder.decode(request.getParameter("fileName"),"UTF-8");//後臺轉編碼一次成中文
		String[] fileNameAll = fileName.split("\\|");
		String oldFileName = fileNameAll[0];
		String newFileName = fileNameAll[1];
		String filePath = this.getServletConfig().getServletContext().getRealPath("/");
		File file = new File(filePath + "uploaded\\" + newFileName);
		response.setContentType("application/x-msdownload");
		response.setContentLength((int) file.length());
		response.setHeader("Content-Disposition", "attachment;filename=" + new String(oldFileName.getBytes("GBK"), "ISO8859_1"));//保證另存爲文件名爲中文
		FileInputStream fis = new FileInputStream(file);
		BufferedInputStream bis = new BufferedInputStream(fis);
		byte[] b = new byte[1024];
		long k = 0;

		OutputStream out = response.getOutputStream();
		while (k < file.length()) {
			int j = bis.read(b, 0, 1024);
			k += j;
			out.write(b, 0, j);
		}
		out.close();
		bis.close();
		fis.close();
	}


	/**
	 * 上傳文件
	 * 
	 * @param req
	 * @return 
	 * @throws Exception
	 */
	public String UpFile(HttpServletRequest req) throws Exception {// 上傳文件
	// req.setCharacterEncoding("UTF-8");//設置編碼方式,讓上傳的文件(中文)不會出現亂碼
		String fileName = "";
		String filePath = this.getServletConfig().getServletContext()
				.getRealPath("/");
		File saveDir = new File(filePath + "uploaded");
		if (!saveDir.isDirectory()) {
			saveDir.mkdir();
		}
		DiskFileItemFactory dff = new DiskFileItemFactory();// 建立該對象
		dff.setRepository(saveDir);// 指定上傳文件的臨時目錄
		dff.setSizeThreshold(1024000);// 指定在內存中緩存數據大小,單位爲byte
		ServletFileUpload sfu = new ServletFileUpload(dff);// 建立該對象
		sfu.setSizeMax(50000000);// 指定單個上傳文件的最大尺寸
		List items = sfu.parseRequest(req);// 解析request //
		// 請求,並返回FileItemIterator集合
		Iterator iter = items.iterator();
		while (iter.hasNext()) {
			FileItem fis = (FileItem) iter.next();// 從集合中得到一個文件流
			if (!fis.isFormField()) {// 過濾掉表單中非文件域
				fileName = fis.getName().substring(
						fis.getName().lastIndexOf("\\") + 1);// 得到上傳文件的文件名
				String hzm = fileName.substring(fileName.indexOf('.'));// 獲取文件的後綴名
				String nameString = getNewFileName() + hzm;// 新生成的文件名稱
				fis.write(new File(saveDir + "\\" + nameString));
				fileName = fileName + "|" + nameString;
			}
		}
		return fileName;
	}

	/**
	 * 刪除文件
	 * 
	 * @param fileName
	 * @return 
	 */
	public boolean deleteFileDao(String fileName) {
		boolean b = false;
		String filePath = this.getServletConfig().getServletContext()
				.getRealPath("/");
		File file = new File(filePath + "uploaded\\" + fileName);
		if (file.exists()) {
			file.delete();
			b = true;
		}
		return b;
	}

	/**
	 * 生成新文件名稱(年月日時分秒+二位隨機碼)
	 * 
	 * @return 
	 */
	public String getNewFileName() {
		String newFileName = "";
		Date date = new Date();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
				"yyyyMMddHHmmss");
		newFileName = simpleDateFormat.format(date);
		String random = getRandom(2);
		return newFileName + random;
	}

	/**
	 * 獲取n位隨機數
	 * 
	 * @param n
	 * @return 
	 */
	public String getRandom(int n) {
		String randomString = "";
		if (n == 1) {
			randomString = (int) (Math.random() * 10) + "";
		} else {
			randomString = getRandom(n - 1) + (int) (Math.random() * 10);
		}
		return randomString;
	}
}
相關文章
相關標籤/搜索