Javaweb中最簡單的檔案上傳
阿新 • • 發佈:2018-12-23
3、servlet程式碼
執行simpleFileupload.jsp檔案(如下圖)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(); } } }