生活随笔
收集整理的這篇文章主要介紹了
Servlet 文件上传
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Servlet 可以與 HTML form 標(biāo)簽一起使用,來允許用戶上傳文件到服務(wù)器。上傳的文件可以是文本文件或圖像文件或任何文檔。
本文使用到的文件有:
創(chuàng)建一個文件上傳表單
下面的 HTML 代碼創(chuàng)建了一個文件上傳表單。以下幾點(diǎn)需要注意:
- 表單 method 屬性應(yīng)該設(shè)置為 POST 方法,不能使用 GET 方法。?
- 表單 enctype 屬性應(yīng)該設(shè)置為 multipart/form-data. 多部分表單 ?? 參考深入解析multipart/form-data.?
- ?使用multipart/form-data.? 后?? 使用request.getParameter()? 將返回空值? 因?yàn)槭欠植糠值?請求體? 有個分割線的 屬性? 無法直接獲得參數(shù)
- 表單 action 屬性應(yīng)該設(shè)置為在后端服務(wù)器上處理文件上傳的 Servlet 文件。下面的實(shí)例使用了 UploadServlet Servlet 來上傳文件。
- 上傳單個文件,您應(yīng)該使用單個帶有屬性 type="file" 的 <input .../> 標(biāo)簽。為了允許多個文件上傳,請包含多個 name 屬性值不同的 input 標(biāo)簽。輸入標(biāo)簽具有不同的名稱屬性的值。瀏覽器會為每個 input 標(biāo)簽關(guān)聯(lián)一個瀏覽按鈕。
-
?原理:
?
html 代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
?? ?<form action="/WEB32/fileuploadServlet2" method="post" enctype="multipart/form-data">
?? ??? ?<input type="text" name="username"><br>
?? ??? ?<input type="file" name="filename"><br>
?? ??? ?<input type="submit" value="上傳文件">
?? ?</form>
</body>
</html> ?servlet部分代碼
以下是 UploadServlet 的源代碼,同于處理文件上傳,在這之前我們先確保依賴包已經(jīng)引入到項(xiàng)目的 WEB-INF/lib 目錄下:
- 下面的實(shí)例依賴于 FileUpload,所以一定要確保在您的 classpath 中有最新版本的 commons-fileupload.x.x.jar 文件。可以從 http://commons.apache.org/proper/commons-fileupload/ 下載。
- FileUpload 依賴于 Commons IO,所以一定要確保在您的 classpath 中有最新版本的 commons-io-x.x.jar 文件。可以從 http://commons.apache.org/proper/commons-io/ 下載。
你可以直接下載本站提供的兩個依賴包:
- commons-fileupload-1.3.2.jar
- commons-io-2.5.jar
package com.itheima;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.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;
import org.apache.commons.io.IOUtils;public class FileuploadServlet2
extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {try {//1、創(chuàng)建磁盤文件項(xiàng)工廠//作用:設(shè)置緩存文件的大小 設(shè)置臨時文件存儲的位置String path_temp =
this.getServletContext().getRealPath("temp"
);//DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024, new File(path_temp));DiskFileItemFactory factory =
new DiskFileItemFactory();factory.setSizeThreshold(1024*1024
);factory.setRepository(new File(path_temp));//2、創(chuàng)建文件上傳的核心類ServletFileUpload upload =
new ServletFileUpload(factory);//設(shè)置上傳文件的名稱的編碼upload.setHeaderEncoding("UTF-8"
);//ServletFileUpload的APIboolean multipartContent = upload.isMultipartContent(request);
//判斷表單是否是文件上傳的表單if(multipartContent){//是文件上傳的表單//***解析request獲得文件項(xiàng)集合List<FileItem> parseRequest =
upload.parseRequest(request);if(parseRequest!=
null){for(FileItem item : parseRequest){//判斷是不是一個普通表單項(xiàng)boolean formField =
item.isFormField();if(formField){//username=zhangsanString fieldName =
item.getFieldName();String fieldValue = item.getString("UTF-8");
//對普通表單項(xiàng)的內(nèi)容進(jìn)行編碼
System.out.println(fieldName+"----"+
fieldValue);//當(dāng)表單是enctype="multipart/form-data"時 request.getParameter相關(guān)的方法//String parameter = request.getParameter("username");
}else{//文件上傳項(xiàng)//文件的名String fileName =
item.getName();//獲得上傳文件的內(nèi)容InputStream in =
item.getInputStream();String path_store =
this.getServletContext().getRealPath("upload"
);OutputStream out =
new FileOutputStream(path_store+"/"+
fileName);IOUtils.copy(in, out);in.close();out.close();//刪除臨時文件
item.delete();}}}}else{//不是文件上傳表單//使用原始的表單數(shù)據(jù)的獲得方式 request.getParameter();
}} catch (FileUploadException e) {e.printStackTrace();}}public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {doGet(request, response);}
} web.xml
<servlet><description></description><display-name>FileuploadServlet2
</display-name><servlet-name>FileuploadServlet2
</servlet-name><servlet-class>com.itheima.FileuploadServlet2
</servlet-class></servlet><servlet-mapping><servlet-name>FileuploadServlet2
</servlet-name><url-pattern>/fileuploadServlet2
</url-pattern></servlet-mapping> ?
轉(zhuǎn)載于:https://www.cnblogs.com/qinning/p/9979637.html
總結(jié)
以上是生活随笔為你收集整理的Servlet 文件上传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。