commons-upload 实现文件的上传功能

来源:互联网 发布:异维a酸红霉素凝胶知乎 编辑:程序博客网 时间:2024/05/20 20:02

html:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>upload</title>
  </head>
  <body>
    <form action="servlet/Upload" method="post" enctype="multipart/form-data">
     author:<input name="author"/>
     file:<input type="file" name="file"/>
     <input type="submit" value="ok"/>
    </form>
  </body>
</html>

 

servlet:

 

package servlet;

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.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.log4j.Logger;

import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;
/**
 *
 * @author zwc
 *
 */
@SuppressWarnings("serial")
public class Upload extends HttpServlet {
 private static Logger logger = Logger.getLogger(OperateCustomer.class);
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request,response);
 }

 @SuppressWarnings("deprecation")
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  response.setCharacterEncoding("UTF-8");
  request.setCharacterEncoding("UTF-8");
  PrintWriter out = response.getWriter();
  
  
  String uploadDir = getServletContext().getRealPath("/WEB-INF/upload");

注:上传的,文件,最好,存在web-inf目录下, 因为,该目录下的,内容是浏览器,无法访问滴,要不如果你上传一个jsp,文件,那么,不是可以直接通过目录访问,可能对网站造成影响
  if(uploadDir == null){
   logger.warn("无法访问上传目录:/WEB-INF/upload");
  }
  
  File uploadFile = new File(uploadDir);
  if(!uploadFile.exists()){
   if(uploadFile.mkdir()){
    logger.warn("无法创建目录");
   }
  }
  DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
  ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
  ServletRequestContext requestContext = new ServletRequestContext(request);

  
  try {
   Iterator<FileItem> i = (Iterator<FileItem>) servletFileUpload.parseRequest(requestContext).iterator();
   while(i.hasNext()){
    FileItem item = i.next();
    if(item.isFormField()){
     out.print("Field:" + item.getFieldName() + ">>" + item.getString());
    }else{
     String name = item.getName();
     logger.info("得到的文件路径为:" + item.getName());
     int start = name.lastIndexOf("//");
     String otherName = name.substring(start);
     File desFile = new File(uploadDir + otherName);
     try {
      logger.info("保存的文件路径:" + uploadDir + otherName);
      item.write(desFile);
      out.print( otherName + "上传成功!!");
     } catch (Exception e) {
      logger.warn("写入上传目录时,失败",e);
     } finally{
      logger.info("删除临时文件");
      item.delete();
     }
    }
   }
  } catch (FileUploadException e) {
   logger.warn("无法从页面获得数据", e);
  }
 }
}

注:commons-upload ,依赖一个,commons-io的包,所以,需要导入这两个包

 

 

原创粉丝点击