图片上传最终版本

  1. SERVLET
  2. package com.bjsxt.shopping.servlet;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import javax.servlet.ServletConfig;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import org.apache.commons.fileupload.FileItem;
  14. import org.apache.commons.fileupload.FileUploadException;
  15. import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
  16. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  17. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  18. public class FileUploadServlet extends HttpServlet
  19. {
  20.     //定义成员变量来记录上传的路径
  21.     private String upLoadPath="";
  22.     @Override
  23. //    重写init(ServletConfig config)方法(不是void init())来取得WEB.XML的值
  24.     public void init(ServletConfig config) throws ServletException
  25.     {
  26.         this.upLoadPath=config.getInitParameter("upload");
  27.     }
  28.     private static final long serialVersionUID = 1L;
  29.     public FileUploadServlet()
  30.     {
  31.         super();
  32.     }
  33.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  34.     {
  35.         this.doPost(request, response);
  36.     }
  37.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  38.     {
  39.         request.setCharacterEncoding("utf-8");
  40.         int id = -1;
  41.         final long MAX_SIZE = 300 * 1024 * 1024;// 设置上传文件最大值
  42.         // 允许上传的文件格式的列表
  43.         final String[] allowedExt = new String[]{"jpg""jpeg""gif""txt""doc""mp3""wma""m4a""rar""zip"};
  44.         response.setContentType("text/html");
  45.         // 设置字符编码为UTF-8, 统一编码,处理出现乱码问题
  46.         response.setCharacterEncoding("UTF-8");
  47.         // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
  48.         DiskFileItemFactory dfif = new DiskFileItemFactory();
  49.         dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
  50.         dfif.setRepository(new File(request.getRealPath("/") + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
  51.         // 用以上工厂实例化上传组件
  52.         ServletFileUpload sfu = new ServletFileUpload(dfif);
  53.         // 设置最大上传大小
  54.         sfu.setSizeMax(MAX_SIZE);
  55.         PrintWriter out = response.getWriter();
  56.         // 从request得到所有上传域的列表
  57.         List fileList = null;
  58.         try
  59.         {
  60.             fileList = sfu.parseRequest(request);
  61.         } catch (FileUploadException e)
  62.         {// 处理文件尺寸过大异常
  63.             if (e instanceof SizeLimitExceededException)
  64.             {
  65.                 out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
  66.                 out.println("<a href=/"./admin/manager/productlist.jsp/" >返回</a>");
  67.                 return;
  68.             }
  69.             e.printStackTrace();
  70.         }
  71.         // 没有文件上传
  72.         if (fileList == null || fileList.size() == 0)
  73.         {
  74.             out.println("请选择上传文件<p />");
  75.             out.println("<a href=/"./admin/manager/productlist.jsp/" >返回</a>");
  76.             return;
  77.         }
  78.         // 得到所有上传的文件
  79.         Iterator fileItr = fileList.iterator();
  80.         // 循环处理所有文件
  81.         while (fileItr.hasNext())
  82.         {
  83.             FileItem fileItem = null;
  84.             String path = null;
  85.             long size = 0;
  86.             // 得到当前文件
  87.             fileItem = (FileItem) fileItr.next();
  88.             // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
  89.             if (fileItem != null && fileItem.isFormField())
  90.             {
  91.                 if (fileItem.getFieldName().equals("id"))
  92.                 {
  93.                     id = Integer.parseInt(fileItem.getString());
  94.                 }
  95.             }
  96.             if (fileItem != null && !fileItem.isFormField())
  97.             {
  98.                 // 得到文件的完整路径
  99.                 path = fileItem.getName();
  100.                 // 得到文件的大小
  101.                 size = fileItem.getSize();
  102.                 if ("".equals(path) || size == 0)
  103.                 {
  104.                     out.println("请选择上传文件<p />");
  105.                     out.println("<a href=/"./admin/manager/productlist.jsp/" >返回</a>");
  106.                     return;
  107.                 }
  108.                 // 得到去除路径的文件名
  109.                 String t_name = path.substring(path.lastIndexOf("//") + 1);
  110.                 // 得到文件的扩展名(无扩展名时将得到全名)
  111.                 String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
  112.                 // 拒绝接受规定文件格式之外的文件类型
  113.                 int allowFlag = 0;
  114.                 int allowedExtCount = allowedExt.length;
  115.                 for (; allowFlag < allowedExtCount; allowFlag++)
  116.                 {
  117.                     if (allowedExt[allowFlag].equals(t_ext))
  118.                         break;
  119.                 }
  120.                 if (allowFlag == allowedExtCount)
  121.                 {
  122.                     out.println("请上传以下类型的文件<p />");
  123.                     for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
  124.                         out.println("*." + allowedExt[allowFlag] + "   ");
  125.                     out.println("<p /><a href=/"./admin/manager/productlist.jsp/" >返回</a>");
  126.                     return;
  127.                 }
  128.                 // long now = System.currentTimeMillis();
  129.                 // 根据系统时间生成上传后保存的文件名
  130.                 // String prefix = String.valueOf(now);
  131.                 // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
  132.                 // String u_name = request.getRealPath("/") + "ImagesUploaded/"
  133.                 // + prefix + "." + t_ext;
  134.                 //String filename = t_name;
  135.                 // System.out.println(t_name);
  136.                 try
  137.                 {
  138.                     // 保存文件到C://upload目录下
  139.                     //统一将文件的扩展名改为 jpg 方便在页面中显示
  140.                     fileItem.write(new File(upLoadPath + id + "." + "jpg"));
  141.                     // System.out.println(filename);
  142.                     out.println("文件上传成功. 已保存到: " + upLoadPath + id + "." + "jpg" + "   文件大小: " + size + "字节<p />");
  143.                     out.println("<a href=/"./admin/manager/productlist.jsp/" >继续上传</a>");
  144.                 } catch (Exception e)
  145.                 {
  146.                     e.printStackTrace();
  147.                 }
  148.             }
  149.         }
  150.     }
  151. }
  152. WEB.XML中写入下面的内容:
  153.   <servlet>
  154.     <description>This is the description of my J2EE component</description>
  155.     <display-name>This is the display name of my J2EE component</display-name>
  156.     <servlet-name>FileUploadServlet</servlet-name>
  157.     <servlet-class>com.bjsxt.shopping.servlet.FileUploadServlet</servlet-class>
  158.     <init-param>
  159.         <param-name>upload</param-name>
  160.         <param-value>E://workspace//MyProjest//Shopping//WebRoot//images//product//</param-value>
  161.     </init-param>
  162.   </servlet>
  163. 其实最好的方法是增加一下属性文件,把要上传的路径写到该文件中,要上传时再从中读取这个路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值