FirstTime之Apache Commons FileUpload

Apache的Commons FileUpload是一個不錯的附件上傳組件,現把大致過程分享一下。  


1.所需的jar包:
commons-fileupload-1.2.2.jar
commons-io-2.4.jar


2.配置一個上傳的servlet html

<servlet>
    <description></description>
    <display-name>FileUploadServlet</display-name>
    <servlet-name>FileUploadServlet</servlet-name>
    <servlet-class>cn.hailiang.fileupload.FileUploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FileUploadServlet</servlet-name>
    <url-pattern>/FileUploadServlet</url-pattern>
  </servlet-mapping>
3.FileUploadServlet的代碼

package cn.hailiang.fileupload;

import java.io.File;
import java.io.IOException;
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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
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);
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	protected void doPost(HttpServletRequest request, HttpServletResponse response) {
		// 判斷請求是否包含 multipart數據
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		if (isMultipart) {
			try {

				String path = "c:\\attachment\\";// 設置附件保存路徑
				File attachementPath = new File(path);
				if (!attachementPath.exists()) {
					attachementPath.mkdir();
				}

				File tempPath = new File("c:\\AttachmentTemp\\");// 設置臨時目錄
				if (!tempPath.exists()) {
					tempPath.mkdir();
				}

				DiskFileItemFactory factory = new DiskFileItemFactory();
				factory.setSizeThreshold(1024 * 1024 * 1);// 初始內存大小1M,超出後則直接保存到臨時目錄中
				factory.setRepository(tempPath);// 設置臨時目錄

				ServletFileUpload upload = new ServletFileUpload(factory);
				upload.setHeaderEncoding("UTF-8");
				// upload.setFileSizeMax(1024 * 1024 * 50);// 設置單個文件上傳大小爲50M

				List<FileItem> items = upload.parseRequest(request);
				System.out.println("items=" + items);

				// Process the uploaded items
				Iterator iter = items.iterator();
				while (iter.hasNext()) {
					FileItem item = (FileItem) iter.next();
					if (item.isFormField()) {
						// 處理HTML表單域
						if (item.isFormField()) {
							String name = item.getFieldName();
							String value = item.getString("UTF-8");
							System.out.println("FieldName=" + name + " \t FieldValue=" + value);
						}
					} else {
						// 處理附件
						String fieldName = item.getFieldName();
						String _fileName = item.getName();
						long _fileSize = item.getSize();
						if (_fileSize == 0) {
							continue;
						}
						System.out.println("附件大小爲: " + (_fileSize / 1024) + " KB");
						
						// 保存附件
						_fileName = _fileName.substring(_fileName.lastIndexOf("\\") + 1);
						File uploadedFile = new File(path + _fileName);
						if (!uploadedFile.exists()) {
							item.write(uploadedFile);
						} else {
							System.out.println("附件已經存在");
						}
						System.out.println("附件保存路徑爲:" + path + _fileName);
					}
				}
			} catch (FileSizeLimitExceededException e) {
				e.printStackTrace();
			} catch (FileUploadException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

4.上傳頁面的代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>commons-fileupload 演示</title>
	</head>
	<body>
		<form action="/FileUploadServlet" enctype="multipart/form-data" method="post">
			標題&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="Title" value="文件上傳測試"/><br><br>
			備註&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="Remark" value="備註"><br><br>
			附件1&nbsp;&nbsp;<input type="file" name="attachment1"><br><br>
			附件2&nbsp;&nbsp;<input type="file" name="attachment2"><br><br>
			<input type="submit" value="&nbsp;提交&nbsp;">
		</form>
	</body>
</html>
5.效果截圖:




 此組件配置和使用起來,都相對比較簡單,只要參照官網的Uer guide,基本上都能搞定。 java

相關文章
相關標籤/搜索