使用apache.commons.fileupload等进行文件上传

时间:2022-03-09 21:38:32

表单里有上传文件

url:http://wanglizhuang.javaeye.com/blog/466524

 

文章分类:Web前端 关键字: 上传文件和获取表单值
Java代码 使用apache.commons.fileupload等进行文件上传
  1. 在servlet里的代码如下:  
Java代码 使用apache.commons.fileupload等进行文件上传
  1. String[] string = { "title""type""content"};//表单里其他内容的name   
  2. String filename = FileSave.save(request, response, string); // 保存文件获取保存的文件名称   
  3. map = FileSave.map;//获取值  

 

   下面是公共类:

 

Java代码 使用apache.commons.fileupload等进行文件上传
  1. package cn.com.crystalnet.common;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.io.PrintWriter;   
  6. import java.io.UnsupportedEncodingException;   
  7. import java.util.HashMap;   
  8. import java.util.Iterator;   
  9. import java.util.List;   
  10. import java.util.Map;   
  11.   
  12. import javax.servlet.http.HttpServletRequest;   
  13. import javax.servlet.http.HttpServletResponse;   
  14.   
  15. import org.apache.commons.fileupload.FileItem;   
  16. import org.apache.commons.fileupload.FileUploadException;   
  17. import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;   
  18. import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
  19. import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  20. /**  
  21.  * title:处理文件上传  
  22.  * @author 王立壮  
  23.  *  
  24.  */  
  25.   
  26. public class FileSave {   
  27.        
  28.     public static Map map = null;   
  29.   
  30.     public static String save(HttpServletRequest request, HttpServletResponse response,String[] paramName) {   
  31.            
  32.         String u_name = null;   
  33.            
  34.         map = new HashMap();   
  35.            
  36.         final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M   
  37.         // 允许上传的文件格式的列表   
  38.         final String[] allowedExt = new String[] { "gif","jpg","png","word","excel","txt","zip","ppt","pdf"  };   
  39.         response.setContentType("text/html");   
  40.         // 设置字符编码为UTF-8, 这样支持汉字显示   
  41.         response.setCharacterEncoding("UTF-8");   
  42.   
  43.         // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload   
  44.         DiskFileItemFactory dfif = new DiskFileItemFactory();   
  45.         dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘   
  46.         dfif.setRepository(new File(request.getRealPath("/")   
  47.                 + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录   
  48.   
  49.         // 用以上工厂实例化上传组件   
  50.         ServletFileUpload sfu = new ServletFileUpload(dfif);   
  51.         // 设置最大上传尺寸   
  52.         sfu.setSizeMax(MAX_SIZE);   
  53.   
  54.         PrintWriter out = null;   
  55.         try {   
  56.             out = response.getWriter();   
  57.         } catch (IOException e1) {   
  58.             // TODO Auto-generated catch block   
  59.             e1.printStackTrace();   
  60.         }   
  61.         // 从request得到 所有 上传域的列表   
  62.         List fileList = null;   
  63.        
  64.         try {   
  65.             fileList = sfu.parseRequest(request);   
  66.                
  67.             if (fileList != null) {   
  68.                 for (Iterator itr = fileList.iterator(); itr.hasNext();) {   
  69.                     FileItem fileItem = (FileItem) itr.next();   
  70.                     for (int i = 0; i < paramName.length; i++) {   
  71.                         if (fileItem.getFieldName().equalsIgnoreCase(   
  72.                                 paramName[i])) {   
  73.                             map.put(fileItem.getFieldName(), new String(fileItem.getString().getBytes("ISO8859-1"),"UTF-8"));// 中文转码   
  74.                         }   
  75.                     }   
  76.                 }   
  77.             }   
  78.                
  79.             System.out.println(fileList.size());   
  80.         } catch (FileUploadException e) {// 处理文件尺寸过大异常   
  81.             if (e instanceof SizeLimitExceededException) {   
  82.                 out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");   
  83.                 out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");   
  84.   
  85.             }   
  86.             e.printStackTrace();   
  87.         } catch (UnsupportedEncodingException e) {   
  88.             // TODO Auto-generated catch block   
  89.             e.printStackTrace();   
  90.         }   
  91.         // 没有文件上传   
  92.         if (fileList == null || fileList.size() == 0) {   
  93.             out.println("请选择上传文件<p />");   
  94.             out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");   
  95.   
  96.         }   
  97.         // 得到所有上传的文件   
  98.         Iterator fileItr = fileList.iterator();   
  99.         // 循环处理所有文件   
  100.   
  101.         while (fileItr.hasNext()) {   
  102.             FileItem fileItem = null;   
  103.             String path = null;   
  104.             long size = 0;   
  105.             // 得到当前文件   
  106.             fileItem = (FileItem) fileItr.next();   
  107.             // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)   
  108.             if (fileItem == null || fileItem.isFormField()) {   
  109.                 continue;   
  110.             }   
  111.             // 得到文件的完整路径   
  112.             path = fileItem.getName();   
  113.             // 得到文件的大小   
  114.             size = fileItem.getSize();   
  115.             if ("".equals(path) || size == 0) {   
  116.                 out.println("请选择上传文件<p />");   
  117.                 out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");   
  118.                 break;   
  119.   
  120.             }   
  121.   
  122.             // 得到去除路径的文件名   
  123.             String t_name = path.substring(path.lastIndexOf("//") + 1);   
  124.             // 得到文件的扩展名(无扩展名时将得到全名)   
  125.             String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);   
  126.             // 拒绝接受规定文件格式之外的文件类型   
  127.             int allowFlag = 0;   
  128.             int allowedExtCount = allowedExt.length;   
  129.             for (; allowFlag < allowedExtCount; allowFlag++) {   
  130.                 if (allowedExt[allowFlag].equals(t_ext))   
  131.                     break;   
  132.             }   
  133.             if (allowFlag == allowedExtCount) {   
  134.                 out.println("请上传以下类型的文件<p />");   
  135.                 for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)   
  136.                     out.println("*." + allowedExt[allowFlag]   
  137.                             + "&nbsp;&nbsp;&nbsp;");   
  138.                 out   
  139.                         .println("<p /><a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");   
  140.   
  141.             }   
  142.   
  143.             long now = System.currentTimeMillis();   
  144.             // 根据系统时间生成上传后保存的文件名   
  145.             String prefix = String.valueOf(now);   
  146.             // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下   
  147.             u_name = request.getRealPath("/") + "Back//mailUpload//"  
  148.                     + prefix + "." + t_ext;   
  149.             try {   
  150.                 // 保存文件   
  151.                 fileItem.write(new File(u_name));   
  152.                 u_name = "mailUpload/"+ prefix + "." + t_ext;   
  153.             } catch (Exception e) {   
  154.                 e.printStackTrace();   
  155.             }   
  156.         }   
  157.            
  158.                
  159.         return u_name;   
  160.     }   
  161.   
  162. }  

 

 

 

 ==========================================================

jsp文件上传

url:http://myrl1023.javaeye.com/blog/265398

选把上传文件的插件cos下下来;
upload.html
Java代码 使用apache.commons.fileupload等进行文件上传
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  2. <html>   
  3. <head>   
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  5. <title>文件上传前台控制检测程序 v0.6</title>   
  6. <style>   
  7. body,td{font-size:12px;}   
  8. </style>   
  9. <script language=javascript>   
  10.   
  11.   
  12. var ImgObj=new Image();      //建立一个图像对象   
  13.   
  14. var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型   
  15. var FileObj,ImgFileSize,ImgWidth,ImgHeight,FileExt,ErrMsg,FileMsg,HasCheked,IsImg//全局变量图片相关属性   
  16.   
  17. //以下为限制变量   
  18. var AllowExt=".jpg|.gif|.doc|.txt|"  //允许上传的文件类型 ?为无限制 每个扩展名后边要加一个"|" 小写字母表示   
  19. //var AllowExt=0   
  20. var AllowImgFileSize=70;    //允许上传图片文件的大小 0为无限制  单位:KB   
  21. var AllowImgWidth=500;      //允许上传的图片的宽度 ?为无限制 单位:px(像素)   
  22. var AllowImgHeight=500;      //允许上传的图片的高度 ?为无限制 单位:px(像素)   
  23.   
  24. HasChecked=false;   
  25.   
  26. function CheckProperty(obj)    //检测图像属性   
  27. {   
  28.   FileObj=obj;   
  29.   if(ErrMsg!="")      //检测是否为正确的图像文件 返回出错信息并重置   
  30.   {   
  31.     ShowMsg(ErrMsg,false);   
  32.     return false;      //返回   
  33.   }   
  34.   
  35.   if(ImgObj.readyState!="complete")  //如果图像是未加载完成进行循环检测   
  36.   {   
  37.     setTimeout("CheckProperty(FileObj)",500);   
  38.     return false;   
  39.   }   
  40.   
  41.   ImgFileSize=Math.round(ImgObj.fileSize/1024*100)/100;//取得图片文件的大小   
  42.   ImgWidth=ImgObj.width      //取得图片的宽度   
  43.   ImgHeight=ImgObj.height;    //取得图片的高度   
  44.   FileMsg="/n图片大小:"+ImgWidth+"*"+ImgHeight+"px";   
  45.   FileMsg=FileMsg+"/n图片文件大小:"+ImgFileSize+"Kb";   
  46.   FileMsg=FileMsg+"/n图片文件扩展名:"+FileExt;   
  47.   
  48.   if(AllowImgWidth!=0&&AllowImgWidth<ImgWidth)   
  49.     ErrMsg=ErrMsg+"/n图片宽度超过限制。请上传宽度小于"+AllowImgWidth+"px的文件,当前图片宽度为"+ImgWidth+"px";   
  50.   
  51.   if(AllowImgHeight!=0&&AllowImgHeight<ImgHeight)   
  52.     ErrMsg=ErrMsg+"/n图片高度超过限制。请上传高度小于"+AllowImgHeight+"px的文件,当前图片高度为"+ImgHeight+"px";   
  53.   
  54.   if(AllowImgFileSize!=0&&AllowImgFileSize<ImgFileSize)   
  55.     ErrMsg=ErrMsg+"/n图片文件大小超过限制。请上传小于"+AllowImgFileSize+"KB的文件,当前文件大小为"+ImgFileSize+"KB";   
  56.   
  57.   if(ErrMsg!="")   
  58.     ShowMsg(ErrMsg,false);   
  59.   else  
  60.     ShowMsg(FileMsg,true);   
  61. }   
  62.   
  63. ImgObj.onerror=function(){ErrMsg='/n图片格式不正确或者图片已损坏!'}   
  64.   
  65. function ShowMsg(msg,tf)  //显示提示信息 tf=true 显示文件信息 tf=false 显示错误信息 msg-信息内容   
  66. {   
  67.   msg=msg.replace("/n","<li>");   
  68.   msg=msg.replace(//n/gi,"<li>");   
  69.   if(!tf)   
  70.   {   
  71.     document.all.UploadButton.disabled=true;   
  72.     FileObj.outerHTML=FileObj.outerHTML;   
  73.     MsgList.innerHTML=msg;   
  74.     HasChecked=false;   
  75.   }   
  76.   else  
  77.   {   
  78.     document.all.UploadButton.disabled=false;   
  79.     if(IsImg)   
  80.       PreviewImg.innerHTML="<img src='"+ImgObj.src+"' width='60' height='60'>"  
  81.     else  
  82.       PreviewImg.innerHTML="非图片文件";   
  83.     MsgList.innerHTML=msg;   
  84.     HasChecked=true;   
  85.   }   
  86. }   
  87.   
  88. function CheckExt(obj)   
  89. {   
  90.   ErrMsg="";   
  91.   FileMsg="";   
  92.   FileObj=obj;   
  93.   IsImg=false;   
  94.   HasChecked=false;   
  95.   PreviewImg.innerHTML="预览区";   
  96.   if(obj.value=="")return false;   
  97.   MsgList.innerHTML="文件信息处理中...";   
  98.   document.all.UploadButton.disabled=true;   
  99.   FileExt=obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();   
  100.   if(AllowExt!=0&&AllowExt.indexOf(FileExt+"|")==-1)  //判断文件类型是否允许上传   
  101.   {   
  102.     ErrMsg="/n该文件类型不允许上传。请上传 "+AllowExt+" 类型的文件,当前文件类型为"+FileExt;   
  103.     ShowMsg(ErrMsg,false);   
  104.     return false;   
  105.   }   
  106.   
  107.   if(AllImgExt.indexOf(FileExt+"|")!=-1)    //如果图片文件,则进行图片信息处理   
  108.   {   
  109.     IsImg=true;   
  110.     ImgObj.src=obj.value;   
  111.     CheckProperty(obj);   
  112.     return false;   
  113.   }   
  114.   else  
  115.   {   
  116.     FileMsg="/n文件扩展名:"+FileExt;   
  117.     ShowMsg(FileMsg,true);   
  118.   }   
  119.     
  120. }   
  121.   
  122. function SwitchUpType(tf)   
  123. {   
  124.     if(tf)   
  125.      str='<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;">'  
  126.     else  
  127.      str='<input type="text" name="file1" onblur="CheckExt(this)" style="width:180px;">'  
  128.     document.all.file1.outerHTML=str;   
  129.     document.all.UploadButton.disabled=true;   
  130.     MsgList.innerHTML="";   
  131. }   
  132.   
  133. </script>   
  134. </head>   
  135. <body>   
  136. <form enctype="multipart/form-data" method="POST" action="./upload.jsp?folderName=uploadImage&relativePath=../../" onsubmit="return HasChecked;">   
  137. <fieldset style="width: 400px; height: 60;padding:2px;">   
  138. <legend><font color="#FF0000">图片来源</font></legend>   
  139. <input type="radio" name="radio1" checked onclick="SwitchUpType(true);">本地<input type="radio" name="radio1" onclick="SwitchUpType(false);">远程:<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;"> <input type="submit" id="UploadButton" value="开始上传" disabled>   
  140.  <br>图片描述:&nbsp;<input type="text" name="imgdes" id="imgdes" size="40" >   
  141. <div style="border:1 solid #808080;background:#E0E0E0;width100%;height:20px;color:#606060;padding:5px;">   
  142. <table border="0"><tr><td width="60" id="PreviewImg">预览区</td><td id="MsgList" valign="top"></td></tr></table>   
  143. </div>   
  144. </fieldset>   
  145. </form>   
  146. </body>   
  147. </html>  

upload.jsp
Java代码 使用apache.commons.fileupload等进行文件上传
  1. <%@ page contentType="text/html; charset=gbk" language="java" errorPage="" %>   
  2. <%@ page language="java" import="java.io.PrintWriter"%>   
  3. <%@ page language="java" import="java.io.*"%>   
  4. <%@ page language="java" import="java.util.UUID"%>   
  5. <%@ page language="java" import="java.util.Enumeration"%>   
  6. <%@ page language="java" import="com.oreilly.servlet.MultipartRequest"%>   
  7. <%@ page language="java" import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>   
  8. <%@ page language="java" import="com.oreilly.servlet.multipart.FileRenamePolicy"%>   
  9.   
  10. <%   
  11.     response.setHeader("Cache-Control""no-cache");   
  12. response.setCharacterEncoding("gb2312");   
  13. PrintWriter xmlout = response.getWriter();   
  14. String uuid = UUID.randomUUID().toString();   
  15. //文件的fileURL   
  16. String fileURL = "";   
  17. // 上传文件名    
  18. String fileName = null;   
  19. //取得文件描述    
  20. String fileDesName = "";   
  21. StringBuffer sb = new StringBuffer();   
  22. String result = "";   
  23.   
  24. try  
  25. {   
  26.    //得到此源文件的目录    
  27.    String realPath = getServletContext().getRealPath("");   
  28.    String contentPath = request.getContextPath();   
  29.    String requestURL = request.getRequestURL().toString();   
  30.    String realURL = requestURL.split(contentPath)[0] + contentPath;   
  31.    //上传文件存放的文件夹名称,一律放在根目录下的文件夹里面即folderName/   
  32.     String folderName = request.getParameter("folderName");   
  33.    //根据不同层级../../的路径不同   
  34.    String relativePath = request.getParameter("relativePath");   
  35.    //文件的相对路径   
  36.    String comparafileName = "";   
  37.      
  38.    // 将上传文件存放在saveDirectory    
  39.     String saveDirectory = realPath + "/" + folderName;   
  40.    System.out.println("saveDirectory= " + saveDirectory);   
  41.    File uploadPath = new File(saveDirectory);   
  42.      
  43.    if (!uploadPath.exists())   
  44.    {   
  45.     uploadPath.mkdir();   
  46.    }   
  47.   
  48.    // 上传文件的大小限制在10 MB    
  49.    int maxPostSize = 10 * 1024 * 1024;   
  50.      
  51.      //实现将上传文件更名,以防同名覆盖和同时上传两个文件名相同的文件,自动在文件名后面加1(在1~9999范围内)   
  52.     FileRenamePolicy policy =(FileRenamePolicy)new DefaultFileRenamePolicy();    
  53.    // 上传文件   
  54.     MultipartRequest multi = new MultipartRequest(request,saveDirectory, maxPostSize, "gb2312",policy);   
  55.    StringBuffer filenametemp = new StringBuffer();   
  56.     filenametemp.append(uuid);   
  57.     //在iidd后面加一下划线"-"以便和文件名称区分出来   
  58.     filenametemp.append("-");   
  59.    //取得文件描述    
  60.     fileDesName = multi.getParameter("imgdes");   
  61.     //System.out.println("文件描述:"+ fileDesName);   
  62.    // 取得所有上传文件名称   
  63.    Enumeration filesname = multi.getFileNames();   
  64.      
  65.    while (filesname.hasMoreElements())    
  66.    {   
  67.     String name = (String) filesname.nextElement();       
  68.     //文件上传的完整路径   
  69.     File f = multi.getFile(name);   
  70.     //文件名称   
  71.     fileName = multi.getFilesystemName(name);   
  72.       
  73.     if (fileName != null)    
  74.     {   
  75.      String oldFilename=fileName;   
  76.      int idx=oldFilename.lastIndexOf(".");    
  77.      String extention=oldFilename.substring(idx);   
  78.      //取文件名    
  79.      String newFilename=oldFilename.substring(0,idx);   
  80.      //得到不重复的文件名,用iidd加文件名   
  81.      String sServerFileName = (String)filenametemp.toString();   
  82.      sServerFileName =sServerFileName+newFilename+extention;   
  83.      File sServerFile= new File(saveDirectory+"//" + sServerFileName);   
  84.      f.renameTo(sServerFile);   
  85.      String FileName = sServerFile.getName();   
  86.      //放在上两级目录下(根目录的文件夹下)   
  87.      //String comparafileName = "../../" + folderName + "/" + FileName;   
  88.      comparafileName = relativePath + folderName + "/" + FileName;   
  89.      System.out.print("文件的相对路径:"+comparafileName);   
  90.      fileURL = realURL + "/" + folderName + "/" + FileName;   
  91.        
  92.     }   
  93.    }   
  94.      
  95.    sb.append("<html><body>");   
  96.    sb.append("<input id = /"UploadIsSucces/" type=/"hidden/" value=/"1/" />");   
  97.    sb.append("图片已经上传成功!");   
  98.    sb.append("<br /> 图片描述:");   
  99.    sb.append(fileDesName);   
  100.    sb.append("<br />图片url:");   
  101.    sb.append(fileURL);   
  102.    String img = "<br /><img src='" + fileURL + "' />";   
  103.    String urll = "http://localhost:8080/pictureupload/uploadImage/877700ca-bac3-4c07-92d5-0458010865e4-aa.jpg";   
  104.    String img2="<br/><a herf=/"http://localhost:8080/pictureupload/upload.html/"> <img src='"+urll+"'/></a>";   
  105.    sb.append(img);   
  106.    sb.append(img2);   
  107.    sb.append("</body></html>");   
  108.    result = sb.toString();   
  109.    //System.out.println(rs);   
  110. }   
  111. catch(Exception e)   
  112. {   
  113.      System.out.println("message=" + e.getMessage());   
  114.    //Posted content length of 42654262 exceeds limit of 10485760   
  115.    String message = e.getMessage();   
  116.      
  117.    if(message.indexOf("Posted content length of") !=-1)   
  118.    {   
  119.     String content = message.split("length of ")[1].split(" exceeds")[0];   
  120.     int ct = Integer.parseInt(content);   
  121.     String limit = message.split("limit of ")[1];   
  122.     int lt = Integer.parseInt(limit);   
  123.       
  124.     result = "对不起,你上传的图片大小为" + ct/(1024*1024) + "MB,超过了最大限制" + lt/(1024*1024) + "MB" ;   
  125.    }   
  126.    else  
  127.    {   
  128.     result = "上传失败";   
  129.    }   
  130.      
  131.    e.printStackTrace();   
  132. }   
  133.   
  134.   
  135. try  
  136. {   
  137.    xmlout.write(result);   
  138. }   
  139. catch (Exception e)   
  140. {   
  141.    e.printStackTrace();   
  142. }   
  143. finally  
  144. {   
  145.    xmlout.flush();   
  146.    xmlout.close();   
  147. }   
  148. %>  
  • cos.jar (47.4 KB)
  • 下载次数: 88