javaweb中文件上传下载示例

来源:互联网 发布:网络主播是干什么的 编辑:程序博客网 时间:2024/05/29 04:39
  1. Html代码
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  3.     pageEncoding="UTF-8"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  8. <title>Insert title here</title>  
  9. <script src="common/js/jquery.js" type="text/javascript"></script>  
  10. <script src="common/js/ajaxfileupload.js" type="text/javascript"></script>  
  11. <script>  
  12. /** 利用ajax方式上传文件 **/  
  13. function uploadFile(){  
  14.     $.ajaxFileUpload({  
  15.         url : 'TestServlet?action=upload',  
  16.         secureuri : false,  
  17.         fileElementId : 'fileC',  
  18.         dataType: 'text',  
  19.         success : function(data,status){  
  20.             if(data.indexOf("上传文件失败!")==-1){  
  21.                 var oldFileName = data.split("|")[0];  
  22.                 var newFileName = data.split("|")[1];  
  23.                 var fileListValue = $("#uploadFileList").html();  
  24.                 var obj = $("#uploadFileList");  
  25.                 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>";  
  26.                 obj.html(content);  
  27.             }  
  28.         },  
  29.         error: function (data, status, e)             //相当于java中catch语句块的用法  
  30.         {  
  31.             alert("上传文件失败!");  
  32.         }  
  33.     });  
  34. }  
  35.   
  36. /** 下载文件 **/  
  37. function downLoadFile(fileName){  
  38.     window.location.href = "TestServlet?action=downLoadFile&fileName="+encodeURIComponent(encodeURIComponent(fileName));  
  39. }  
  40. </script>  
  41. </head>  
  42. <body>  
  43. <form name="frm" id="frm"  method="POST" enctype="multipart/form-data">  
  44. <input type="file" name="fileC" id="fileC" style="width:400px;height:25px"/>  
  45. <input type="button" name="upload" id="upload" value="上传文件" onClick="uploadFile()"/>  
  46. <br/><span id="uploadFileList"></span>  
  47. </form>  
  48. </body>  
  49. </html>  
java代码
  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. }  
依赖的工具类jar包:commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar

0 0
原创粉丝点击