`

Servlet上传文件,commons-fileupload

    博客分类:
  • java
阅读更多
Servlet上传文件,commons-fileupload

<form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA"
    action="upload">

HTTP请求正文采用"multipart/from-data"数据类型,它表示复杂的包括多个子部分的复杂表单.

不管HTTP请求正文为何种数据类型,Servlet容器都会把HTTP请求包装成一个HTTPServletRequest对象.

Servlet直接从HTTPServletRequest对象中解析出复合表单的每个子部分仍然是一项非常复杂的工作.

因此可以利用Apache提供的两个软件包来实现文件上传.

commons-fileipload-1.2.1.jar

commons-io-1.4.jar



UploadServlet.java
package mypack;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
public class UploadServlet extends HttpServlet {
private String filePath;//存放上传文件的目录
private String tempFilePath;//存放临时文件的目录

public void init(ServletConfig config) throws ServletException {
   super.init(config);
   filePath = config.getInitParameter("filePath");
   System.out.println("filePath1 " + filePath); 
   tempFilePath = config.getInitParameter("tempFilePath");
   System.out.println("tempFilePath1 " + tempFilePath);
   filePath = this.getServletContext().getRealPath(filePath);
   System.out.println("filePath2 " + filePath);
   tempFilePath = this.getServletContext().getRealPath(tempFilePath);
   System.out.println("tempFilePath2 " + tempFilePath);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

   response.setContentType("text/plain");
   //向客户端发送响应正文
   PrintWriter outNet = response.getWriter();

   try {
    //创建一个基于硬盘的FileItem工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //设置向硬盘写数据时所用的缓冲区的大小,此处为4K
    factory.setSizeThreshold(4*1024);
    //设置临时目录
    factory.setRepository(new File(tempFilePath));

    //创建一个文件上传处理器
    ServletFileUpload upload = new ServletFileUpload(factory);
    //设置允许上传的文件的最大尺寸,此处为4M
    upload.setSizeMax(4*1024*1024);

    List items = upload.parseRequest(request);

    Iterator iter = items.iterator();

    while(iter.hasNext()) {
     FileItem item = (FileItem)iter.next();
     if(item.isFormField()) {
      processFormField(item,outNet); //处理普通的表单域
     } else {
      processUploadedFile(item,outNet); //处理上传文件
     }
    }   
    outNet.close();
   } catch (Exception ex) {
    ex.printStackTrace();
   }
}

private void processFormField(FileItem item, PrintWriter outNet) { 
   String name = item.getFieldName();
   String value = item.getString();
   outNet.println(name + ":" + value + "\r\n");
}

private void processUploadedFile(FileItem item, PrintWriter outNet) throws Exception {
   String filename = item.getName();
   int index = filename.lastIndexOf("\\");
   filename = filename.substring(index+1, filename.length());
   long fileSize = item.getSize();

   if(filename.equals("") && fileSize == 0) 
    return;

   File uploadFile = new File(filePath + "/" + filename);
   item.write(uploadFile);
   outNet.println(filename + "is saved.");
   outNet.println("The size of " +filename+" is "+fileSize+"\r\n");
}

}



web.xml
<servlet>
   <description>This is the description of my J2EE component</description>
   <display-name>This is the display name of my J2EE component</display-name>
   <servlet-name>UploadServlet</servlet-name>
   <servlet-class>mypack.UploadServlet</servlet-class>
   <init-param>
    <param-name>filePath</param-name>
    <param-value>store</param-value>
   </init-param>
   <init-param>
    <param-name>tempFilePath</param-name>
    <param-value>temp</param-value>
   </init-param>
</servlet>

<servlet-mapping>
   <servlet-name>UploadServlet</servlet-name>
   <url-pattern>/upload</url-pattern>
</servlet-mapping> 



upload.htm
<html>
<head>
   <title>Upload</title>
</head>
<body>
   <form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA"
    action="upload">
    <table>
     <tr>
      <td>
       <div align="right">
        User Name:
       </div>
      </td>
      <td>
       <input type="text" name="username" size="30" />
      </td>
     </tr>
     <tr>
      <td>
       <div align="right">
        Upload File1:
       </div>
      </td>
      <td>
       <input type="file" name="file1" size="30" />
      </td>
     </tr>
     <tr>
      <td>
       <div align="right">
        Upload File2:
       </div>
      </td>
      <td>
       <input type="file" name="file2" size="30" />
      </td>
     </tr>
     <tr>
      <td>
       <input type="submit" name="submit" value="upload">
      </td>
      <td>
       <input type="reset" name="reset" value="reset">
      </td>
     </tr>
    </table>
   </form>
</body>
</html>
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics