1. 程式人生 > >Javaweb中最簡單的檔案上傳

Javaweb中最簡單的檔案上傳

3、servlet程式碼

package com.xiaojie.simpleFileupload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class SimpleFileupload
 */
@WebServlet("/simpleFileupload")
public class SimpleFileupload extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
		//1、建立一個DiskFileItemFactory工廠
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2、建立一個檔案上傳解析器
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解決上傳檔名的中文亂碼
        upload.setHeaderEncoding("UTF-8"); 
		factory.setSizeThreshold(1024 * 500);//設定記憶體的臨界值為500K
		File linshi = new File("E:\\linshi");//當超過500K的時候,存到一個臨時資料夾中
		factory.setRepository(linshi);
		upload.setSizeMax(1024 * 1024 * 5);//設定上傳的檔案總的大小不能超過5M
		try {
			// 1. 得到 FileItem 的集合 items
			List<FileItem> /* FileItem */items = upload.parseRequest(request);

			// 2. 遍歷 items:
			for (FileItem item : items) {
				// 若是一個一般的表單域, 列印資訊
				if (item.isFormField()) {
					String name = item.getFieldName();
					String value = item.getString("utf-8");

					System.out.println(name + ": " + value);
					
					
				}
				// 若是檔案域則把檔案儲存到 e:\\files 目錄下.
				else {
					String fileName = item.getName();
					long sizeInBytes = item.getSize();
					System.out.println(fileName);
					System.out.println(sizeInBytes);

					InputStream in = item.getInputStream();
					byte[] buffer = new byte[1024];
					int len = 0;

					fileName = "e:\\files\\" + fileName;//檔案最終上傳的位置
					System.out.println(fileName);
					OutputStream out = new FileOutputStream(fileName);

					while ((len = in.read(buffer)) != -1) {
						out.write(buffer, 0, len);
					}

					out.close();
					in.close();
				}
			}

		} catch (FileUploadException e) {
			e.printStackTrace();
		}

	}
}
執行simpleFileupload.jsp檔案(如下圖)