日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet 文件上传

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容還不錯,歡迎將生活随笔推薦給好友。