JSP Servlet学习笔记——使用fileupload上传文件

来源:互联网 发布:怎么找自己的淘宝店铺 编辑:程序博客网 时间:2024/06/04 23:31

分类: java web 3559人阅读 评论(2) 收藏 举报
servletjspfileinputstringexception

关键代码如下:

index.jsp

[html] view plaincopyprint?
  1. <body>  
  2.   <center>  
  3.     <h3>文件上传</h3>  
  4.     <font color="red"><%=request.getAttribute("msg")==null?"":request.getAttribute("msg") %> </font>  
  5.     <form enctype="multipart/form-data" method="post" action="servlet/FileUploadServlet">  
  6.         文件描述:<input type="text" name="text" /><br/>  
  7.         选择文件:<input type="file" name="file1" /><br/>  
  8.         选择文件:<input type="file" name="file2" /><br/>  
  9.         选择文件:<input type="file" name="file3" /><br/>  
  10.         选择文件:<input type="file" name="file4" /><br/>  
  11.         选择文件:<input type="file" name="file5" /><br/>  
  12.         <input type="submit" value="上传" />  
  13.     </form>  
  14.   </center>  
  15. </body>  

FileUploadServlet.jsp

[java] view plaincopyprint?
  1. package com.accp.fileupload.servlet;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.List;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.apache.commons.fileupload.FileItem;  
  13. import org.apache.commons.fileupload.FileUploadException;  
  14. import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;  
  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  17.   
  18. public class FileUploadServlet extends HttpServlet {  
  19.   
  20.     private static final long serialVersionUID = 2827297299439162553L;  
  21.   
  22.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  23.             throws ServletException, IOException {  
  24.         //使用同一种处理方法  
  25.         doPost(request, response);  
  26.     }  
  27.   
  28.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  29.             throws ServletException, IOException {  
  30.         request.setCharacterEncoding("UTF-8");  
  31.         response.setContentType("text/html; charset=UTF-8");  
  32.           
  33.         //保存路径  
  34.         String savePath = getServletContext().getRealPath("/upload");  
  35.         File saveDir = new File(savePath);  
  36.         // 如果目录不存在,就创建目录  
  37.         if(!saveDir.exists()){  
  38.             saveDir.mkdir();  
  39.         }  
  40.           
  41.         // 创建文件上传核心类  
  42.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  43.         ServletFileUpload sfu = new ServletFileUpload(factory);  
  44.         //设置编码  
  45.         sfu.setHeaderEncoding("UTF-8");  
  46.         // 设置上传的单个文件的最大字节数为2M  
  47.         sfu.setFileSizeMax(1024*1024*2);  
  48.         //设置整个表单的最大字节数为10M  
  49.         sfu.setSizeMax(1024*1024*10);  
  50.           
  51.         try{  
  52.             // 处理表单请求  
  53.             List<FileItem> itemList = sfu.parseRequest(request);  
  54.             for (FileItem fileItem : itemList) {  
  55.                 // 对应表单中的控件的name  
  56.                 String fieldName = fileItem.getFieldName();  
  57.                 System.out.println("控件名称:" + fieldName);  
  58.                 // 如果是普通表单控件  
  59.                 if(fileItem.isFormField()){  
  60.                     String value = fileItem.getString();  
  61.                     //重新编码,解决乱码  
  62.                     value = new String(value.getBytes("ISO-8859-1"),"UTF-8");  
  63.                     System.out.println("普通内容:" + fieldName + "=" + value);  
  64.                 // 上传文件  
  65.                 }else{  
  66.                     // 获得文件大小  
  67.                     Long size = fileItem.getSize();  
  68.                     // 获得文件名  
  69.                     String fileName = fileItem.getName();  
  70.                     System.out.println("文件名:"+fileName+"\t大小:" + size + "byte");  
  71.                       
  72.                     //设置不允许上传的文件格式  
  73.                     if(fileName.endsWith(".exe")){  
  74.                         request.setAttribute("msg""不允许上传的类型!");  
  75.                     }else{  
  76.                         //将文件保存到指定的路径  
  77.                         File file = new File(savePath,fileName);  
  78.                         fileItem.write(file);  
  79.                         request.setAttribute("msg""上传成功!");  
  80.                     }  
  81.                 }  
  82.             }  
  83.         }catch(FileSizeLimitExceededException e){  
  84.             request.setAttribute("msg""文件太大");  
  85.         }catch(FileUploadException e){  
  86.             e.printStackTrace();  
  87.         }catch(Exception e){  
  88.             e.printStackTrace();  
  89.         }  
  90.         //上传完毕后  转发到首页  
  91.         request.getRequestDispatcher("/index.jsp").forward(request, response);  
  92.     }  
  93.   
  94. }  

相似Demo补充:
import java.io.File;  
import java.io.IOException;  
import java.io.PrintWriter;  
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.FileUploadException;  
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;  
import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
import org.apache.commons.fileupload.servlet.ServletFileUpload;  


public class FileUploadServlet extends HttpServlet {  
   private static final long serialVersionUID = 1L;  
   public FileUploadServlet() {  
       super();  
   }  
   protected void doGet(HttpServletRequest request,  
           HttpServletResponse response) throws ServletException, IOException {  
       this.doPost(request, response);  
   }  
   protected void doPost(HttpServletRequest request,  
           HttpServletResponse response) throws ServletException, IOException {       
       final long MAX_SIZE = 300 * 1024 * 1024;// 设置上传文件最大值  
       // 允许上传的文件格式的列表  
       final String[] allowedExt = new String[] {"jpg", "jpeg", "gif", "txt",  
               "doc","mp3", "wma", "m4a","rar","zip" };  
       response.setContentType("text/html");  
       // 设置字符编码为UTF-8, 统一编码,处理出现乱码问题  
       response.setCharacterEncoding("UTF-8");  
       // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload  
       DiskFileItemFactory dfif = new DiskFileItemFactory();  
       dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘  
       dfif.setRepository(new File(request.getRealPath("/")  
               + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录  
       // 用以上工厂实例化上传组件  
       ServletFileUpload sfu = new ServletFileUpload(dfif);  
       // 设置最大上传大小  
       sfu.setSizeMax(MAX_SIZE);  
      PrintWriter out = response.getWriter();  
       // 从request得到所有上传域的列表  
       List fileList = null;  
       try {  
           fileList = sfu.parseRequest(request);  
       } catch (FileUploadException e) {// 处理文件尺寸过大异常  
           if (e instanceof SizeLimitExceededException) {  
               out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");  
               out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");  
               return;  
           }  
           e.printStackTrace();  
       }  
       // 没有文件上传  
       if (fileList == null || fileList.size() == 0) {  
           out.println("请选择上传文件<p />");  
           out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");  
           return;  
       }  
       // 得到所有上传的文件  
       Iterator fileItr = fileList.iterator();  
       // 循环处理所有文件  
       while (fileItr.hasNext()) {  
           FileItem fileItem = null;  
           String path = null;  
           long size = 0;  
           // 得到当前文件  
           fileItem = (FileItem) fileItr.next();  
           // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)  
           if (fileItem == null || fileItem.isFormField()) {  
               continue;  
           }  
          // 得到文件的完整路径  
           path = fileItem.getName();  
           // 得到文件的大小  
           size = fileItem.getSize();  
           if ("".equals(path) || size == 0) {  
               out.println("请选择上传文件<p />");  
               out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");  
               return;  
           }  
           // 得到去除路径的文件名  
           String t_name = path.substring(path.lastIndexOf("\\") + 1);  
           // 得到文件的扩展名(无扩展名时将得到全名)  
           String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);  
            // 拒绝接受规定文件格式之外的文件类型  
            int allowFlag = 0;  
            int allowedExtCount = allowedExt.length;  
            for (; allowFlag < allowedExtCount; allowFlag++) {  
                if (allowedExt[allowFlag].equals(t_ext))  
                    break;  
            }  
            if (allowFlag == allowedExtCount) {  
                out.println("请上传以下类型的文件<p />");  
                for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)  
                    out.println("*." + allowedExt[allowFlag]
                            + "   ");  
                out.println("<p /><a href=\"FileUpload.html\" target=\"_top\">返回</a>");  
                return;  
            }  
            long now = System.currentTimeMillis();  
            // 根据系统时间生成上传后保存的文件名  
            String prefix = String.valueOf(now);  
            // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下  


//          String u_name = request.getRealPath("/") + "ImagesUploaded/"  




//                  + prefix + "." + t_ext;  
            String filename = prefix + "." + t_ext;  
            try {  
                // 保存文件到C:\\upload目录下  
                fileItem.write(new File("H:/我的工作空间ee/Megashop/WebContent/images/goods/"+filename));  
                System.out.println("文件"+filename);  
                out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext  
                        + "   文件大小: " + size + "字节<p />");  
                out.println("<a href=\"FileUpload.html\" target=\"_top\">继续上传</a>");  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  


}  

0 0
原创粉丝点击