用commons-fileupload实现文件上传

来源:互联网 发布:linux 怎么指定ip登陆 编辑:程序博客网 时间:2024/05/21 06:46
  1. public void doPost(HttpServletRequest request, HttpServletResponse response)  
  2.             throws ServletException, IOException {  
  3.         final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M  
  4.         // 允许上传的文件格式的列表  
  5.         final String[] allowedExt = new String[] { "jpg""jpeg""gif","png" };          
  6.           
  7.         response.setContentType("text/html");  
  8.         // 设置字符编码为UTF-8, 这样支持汉字显示  
  9.         // response.setCharacterEncoding("GBK");  
  10.   
  11.         // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload  
  12.         DiskFileItemFactory dfif = new DiskFileItemFactory();  
  13.         dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘  
  14.         dfif.setRepository(new File(request.getRealPath("/")  
  15.                 + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录  
  16.   
  17.         // 用以上工厂实例化上传组件  
  18.         ServletFileUpload sfu = new ServletFileUpload(dfif);  
  19.         // 设置最大上传尺寸  
  20.         sfu.setSizeMax(MAX_SIZE);  
  21.   
  22.         PrintWriter out = response.getWriter();  
  23.         // 从request得到 所有 上传域的列表  
  24.         List fileList = null;  
  25.         try {  
  26.             fileList = sfu.parseRequest(request);  
  27.         } catch (FileUploadException e) {// 处理文件尺寸过大异常  
  28.             if (e instanceof SizeLimitExceededException) {  
  29.                 out.print("<script>alert('文件尺寸超过规定大小:" + MAX_SIZE  
  30.                         + "字节');history.back();</script>");  
  31.                 return;  
  32.             }  
  33.             e.printStackTrace();  
  34.         }  
  35.         // 没有文件上传  
  36.         if (fileList == null || fileList.size() == 0) {  
  37.             out.print("<script>alert('请选择上传文件!');history.back();</script>");  
  38.             return;  
  39.         }  
  40.         HashMap<String, String> paramMap = new HashMap<String, String>();  
  41.         // 得到所有上传的文件  
  42.         Iterator fileItr = fileList.iterator();  
  43.         // 循环处理所有文件  
  44.         FileItem fileUp= null;  
  45.         String path = null;  
  46.         while (fileItr.hasNext()) {  
  47.             FileItem fileItem = null;  
  48.             long size = 0;  
  49.             // 得到当前文件  
  50.             fileItem = (FileItem) fileItr.next();  
  51.             // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)  
  52.             if (fileItem == null || fileItem.isFormField()) {  
  53.                 String formname=fileItem.getFieldName();//获取form中的名字  
  54.                 String formcontent=fileItem.getString();  
  55.                 formname=new String(formname.getBytes(),"GBK");  
  56.                 formcontent=new String(formcontent.getBytes(),"GBK");  
  57.                 paramMap.put(formname, formcontent);  
  58.             }  
  59.             else{  
  60.             //得到放文件的item  
  61.             fileUp= fileItem;  
  62.             // 得到文件的完整路径  
  63.             path = fileItem.getName();  
  64.             // 得到文件的大小  
  65.             size = fileItem.getSize();  
  66.             if ("".equals(path) || size == 0) {  
  67.                 out.print("<script>alert('请选择上传文件!');history.back();</script>");  
  68.                 return;  
  69.             }  
  70.               
  71.               
  72.               
  73.             }  
  74.               
  75.         }  
  76.         // 得到去除路径的文件名  
  77.         String t_name = path.substring(path.lastIndexOf("\\") + 1);  
  78.         // 得到文件的扩展名(无扩展名时将得到全名)  
  79.         String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);  
  80.         // 拒绝接受规定文件格式之外的文件类型  
  81.         int allowFlag = 0;  
  82.         int allowedExtCount = allowedExt.length;  
  83.         for (; allowFlag < allowedExtCount; allowFlag++) {  
  84.             if (allowedExt[allowFlag].equals(t_ext))  
  85.                 break;  
  86.         }  
  87.         if (allowFlag == allowedExtCount) {  
  88.             StringBuffer sb = new StringBuffer();  
  89.             for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)  
  90.                 sb.append("*." + allowedExt[allowFlag]);  
  91.             out.println("<script>alert('请上传以下类型的文件" + sb.toString()  
  92.                     + "');history.back();</script>");  
  93.             return;  
  94.         }  
  95.         long now = System.currentTimeMillis();  
  96.         // 根据系统时间生成上传后保存的文件名  
  97.         String prefix = String.valueOf(now);  
  98.         // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下  
  99.         String u_name = request.getRealPath("/") + "ImagesUploaded/"  
  100.                 + prefix + "." + t_ext;  
  101.         // 相对项目路径  
  102.         String file_url = request.getContextPath() + "/"  
  103.                 + "ImagesUploaded/" + prefix + "." + t_ext;  
  104.         try {  
  105.             // 保存文件  
  106.             fileUp.write(new File(u_name));  
  107.             out.println("<script  type='text/javascript'>parent.KE.plugin[\"image\"].insert('" +paramMap.get("id")  
  108.                     + "', '" + file_url + "','" +paramMap.get("imgWidth")  + "','"  
  109.                     +paramMap.get("imgHeight")  + "','" +paramMap.get("imgBorder")  + "','" +paramMap.get("imgTitle")   
  110.                     + "')</script>");  
  111.               
  112.         } catch (Exception e) {  
  113.             e.printStackTrace();  
  114.         }
原创粉丝点击