網(wǎng)站備案密碼怎么找回自己開一個培訓(xùn)機構(gòu)流程
文章目錄
- 1. 工具簡介
- 2. 前端頁面
- 2.1. 注意事項
- 2.2. enctype
- 2.3. jsp 代碼
- 3. 后端代碼
- 3.1. 添加依賴
- 3.2. Servlet 代碼
1. 工具簡介
Apache Commons 官方網(wǎng)站。Apache Commons 是一個專注于可重用 Java 組件的所有方面的 Apache 項目。 Apache Commons 項目由三個部分組成:
(1)Commons Proper
- 可重用 Java 組件的存儲庫。
(2)The Commons Sandbox
- 用于 Java 組件開發(fā)的工作區(qū)。
(3)The Commons Dormant
- 當前不活動的組件存儲庫。
Commons-FileUpload 是 Commons Proper 中的一個組件,該組件依賴于 Commons-IO 組件,Commons-IO 也是 Commons Proper 中的一個組件。
2. 前端頁面
FileUpload 能解析符合 HTML 中基于表單的文件上載的 HTTP 請求 。也就是說,如果使用POST
方法提交HTTP
請求,并且內(nèi)容類型為“multipart/form-data”
,則 FileUpload 可以解析該請求,并使結(jié)果容易使用。
2.1. 注意事項
(1)只能使用POST
請求,GET
請求只能提交普通字符串(這是 HTTP 協(xié)議規(guī)定!)
(2)form 表單中的文件控件是type="file"
的input
控件。
(3)form 標簽的enctype
屬性規(guī)定在發(fā)送表單數(shù)據(jù)之前如何對其進行編碼,必須設(shè)置為:multipart/form-data
,表示提交二進制文件。
2.2. enctype
enctype 屬性可能的值有三種:
(1)application/x-www-form-urlencoded
,是 enctype 默認值,表示普通的 form 表單元素提交,在發(fā)送前編碼所有字符,提交格式遵循:name=value&name=value&name=value...
。
(2)multipart/form-data
,表示提交二進制數(shù)據(jù)流,不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。
(3)text/plain
,表示空格轉(zhuǎn)換為"+"
加號,但不對特殊字符編碼。
2.3. jsp 代碼
<%@page contentType="text/html; charset=utf-8"%>
<!doctype html>
<html><head><title>apache commons fileupload</title></head><body><form action="${pageContext.request.contextPath }/fileupload" method="post" enctype="multipart/form-data"><%-- 普通的控件 --%>username<input type="text" name="username"><br> <%-- FileItem --%><%-- 文件控件 --%>file1<input type="file" name="file1"><br> <%-- FileItem --%>file2<input type="file" name="file2"><br> <%-- FileItem --%><input type="submit" value="submit"></form></body>
</html>
3. 后端代碼
3.1. 添加依賴
將準備的JAR
包,添加到項目lib
目錄中。
3.2. Servlet 代碼
package com.wb.controller;import java.io.File;
import java.io.IOException;
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;@WebServlet(urlPatterns = {"/fileupload"})
public class FileUpController extends HttpServlet{private static final long serialVersionUID = 5351212300627874456L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//創(chuàng)建一個“硬盤文件條目工廠”對象DiskFileItemFactory factory = new DiskFileItemFactory();//設(shè)置閾值,設(shè)置JVM一次能夠處理的文件大小(默認吞吐量是10KB)factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);//設(shè)置臨時文件的存儲位置(文件大小大于吞吐量的話就必須設(shè)置這個值,比如文件大小:1GB ,一次吞吐量:1MB)factory.setRepository(new File("E:\\TestFileUpload\\files"));//創(chuàng)建核心對象ServletFileUpload fileUpload = new ServletFileUpload(factory);//設(shè)置最大可支持的文件大小(10MB)fileUpload.setFileSizeMax(1024*1024*10);//設(shè)置轉(zhuǎn)換時使用的字符集//fileUpload.setHeaderEncoding("UTF-8");if (ServletFileUpload.isMultipartContent(req)) {try {//解析請求List<FileItem> fileItems = fileUpload.parseRequest(req);for (FileItem fileItem : fileItems) {if(fileItem.isFormField()) {//判斷該FileItem為一個普通的form元素//獲取字段名String fieldName = fileItem.getFieldName();//獲取字段值,并解決亂碼String fieldValue = fileItem.getString("UTF-8");//String fieldValue = fileItem.getString();System.out.println(fieldName + ":" + fieldValue);}else {//判斷該FileItem為一個文件//獲取文件名String fileName = fileItem.getName();System.out.println("fileName=" + fileName);//獲取文件大小long fileSize = fileItem.getSize();System.out.println("fileSize=" + fileSize);fileItem.write(new File("E:\\TestFileUpload\\files" + File.separator + fileName));}}} catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}
}