用commons FileUpload实现文件上传

  1. import java.io.File;   
  2. import java.util.ArrayList;   
  3. import java.util.Iterator;   
  4. import java.util.List;   
  5.   
  6. import javax.servlet.RequestDispatcher;   
  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.disk.DiskFileItemFactory;   
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  15.   
  16. public class UploadFileServlet extends HttpServlet {   
  17.     private static final long serialVersionUID = 56890894234786L;   
  18.      String saveFolder = "falshFolder";   
  19.      String saveTempFolder = "falshTempFolder";   
  20.   
  21.     @SuppressWarnings("unchecked")   
  22.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
  23.             throws ServletException, java.io.IOException {   
  24.          request.setCharacterEncoding("UTF-8");   
  25.   
  26.         // 文件上傳部分   
  27.         boolean isMultipart = ServletFileUpload.isMultipartContent(request);   
  28.            
  29.         if (isMultipart == true) {   
  30.             try {   
  31.                 // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload   
  32.                  DiskFileItemFactory factory = new DiskFileItemFactory();   
  33.                 // 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘   
  34.                  factory.setSizeThreshold(4096);   
  35.                 //设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录   
  36.                  factory.setRepository(new File(request.getRealPath("/")+   
  37.                          saveTempFolder));   
  38.                 // 用配置好的工厂实例化上传组件   
  39.                  ServletFileUpload upload = new ServletFileUpload(factory);   
  40.                    
  41.                 // 得到所有的表单域,它们目前都被当作FileItem   
  42.                  List<FileItem> fileItems = upload.parseRequest(request);   
  43.                  Iterator<FileItem> iter = fileItems.iterator();   
  44.                    
  45.                 // 依次处理每个表单域   
  46.                 while (iter.hasNext()) {   
  47.                      FileItem item = (FileItem) iter.next();   
  48.                        
  49.                     if(item.isFormField()){   
  50.                         // 如果item是正常的表单域   
  51.                          String name = item.getFieldName();   
  52.                          String value = item.getString();   
  53.                          System.out.print("表单域名为:"+name+"表单域值为:"+value);   
  54.                      }   
  55.                     else{   
  56.                         // 如果item是文件上传表单域   
  57.                            
  58.                         // 获得文件名及路径   
  59.                          String fileName = item.getName();   
  60.                         if (fileName != null) {   
  61.                             //获取要上传的文件   
  62.                              File fullFile = new File(item.getName());      
  63.                              String t_ext = fullFile.getName().substring(fullFile.getName().lastIndexOf(".") + 1);   
  64.   
  65.                             // 如果文件存在则上传   
  66.                             if(fullFile.exists()){   
  67.                                 //存放文件的路径   
  68.                                  String filePath = request.getRealPath("/") + saveFolder;   
  69.                                 long now = System.currentTimeMillis();   
  70.                                 // 根据系统时间生成上传后保存的文件名   
  71.                                  String name = String.valueOf(now);   
  72.                                  File fileOnServer = new File(filePath,   
  73.                                          name+"."+t_ext);   
  74.                                  item.write(fileOnServer);   
  75.                                    
  76.                                  System.out.println("文件"+fileOnServer.getName()+"上传成功");   
  77.                                  request.setAttribute("fileName", fullFile.getName());   
  78.                              }   
  79.                          }   
  80.                      }   
  81.                  }                   
  82.              } catch (Exception e) {   
  83.                  e.printStackTrace();   
  84.              }   
  85.          } else {   
  86.              System.out.println("the enctype must be multipart/form-data");   
  87.          }   
  88.            
  89.   
  90.         // 返回原页   
  91.          RequestDispatcher dispatcher = request   
  92.                  .getRequestDispatcher("index.jsp");   
  93.          dispatcher.forward(request, response);   
  94.         return;   
  95.      }   
  96.   
  97.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  98.             throws ServletException, java.io.IOException {   
  99.          doPost(request, response);   
  100.      }   
  101.   
  102. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值