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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Servlet】servlet上传文件

發布時間:2023/12/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Servlet】servlet上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 添加jar包
  • 2 編寫上傳文件的html頁面
  • 3 web.xml添加servlet配置信息
  • 4 編寫servlet類
  • 5 顯示信息

1 添加jar包

往lib目錄下添加兩個上傳文件所需要的jar包。

2 編寫上傳文件的html頁面

upload.html
  • 添加meta標簽,設置頁面編碼
  • form表單中action為uploadImg,表示對應的servlet。
  • method必須為post,才能上傳文件。
  • 還必須設置enctype="multipart/form-data"。
<!DOCTYPE html> <html lang="en"> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>上傳文件頁面</title> </head> <body> <form action="uploadImg" method="post" enctype="multipart/form-data"><!--<form action="upload" method="post" enctype="multipart/form-data">-->文件名:<input type="text" name="fileName"><br><br>上傳: <input type="file" name="filePath"><br><br><input type="submit" name="提交"> </form> </body> </html>

3 web.xml添加servlet配置信息

<servlet><servlet-name>UploadImgServlet</servlet-name><servlet-class>UploadImgServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>UploadImgServlet</servlet-name><url-pattern>/uploadImg</url-pattern> </servlet-mapping>

4 編寫servlet類

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 javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.List;/*** @author: afuya* @program: j2ee_2* @date: 2021/6/10 10:36 上午*/ public class UploadImgServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);// 設置上傳文件的大小為5Mfactory.setSizeThreshold(1024 * 1024 * 5);List items = null;try {items = upload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();}String filename = null;// items的即包含文件,又包含字段,不能用foreach循環遍歷。// 可以使用普通for循環,// 或者迭代器Iterator iterator = items.iterator();while (iterator.hasNext()) {}for (int i = 0; i < items.size(); i++) {FileItem item = (FileItem) items.get(i);// isFormField()表示是否是普通類型,不是普通類型,就代表是文件if (!item.isFormField()) {// 用時間戳命名上傳的文件,防止文件名重復filename = System.currentTimeMillis() + ".jpg";// 獲取相對于磁盤的絕對路徑String filepath = request.getServletContext().getRealPath("uploaded");System.out.println("文件保存路徑為:" + filepath + "/" + filename);// 創建文件File f = new File(filepath, filename);// 如果沒有該目錄,就創建一個新的目錄f.getParentFile().mkdirs();// 通過item.getInputStream()獲取瀏覽器上傳的文件的輸入流InputStream is = item.getInputStream();// 從輸入流中復制文件到本地磁盤FileOutputStream fos = new FileOutputStream(f);byte[] b = new byte[1024 * 1024 * 5];// read (byte[] b) 方法// 從輸入流中讀取一定數量的字節,并將其存儲在緩沖區數組 b 中。// 以整數形式返回實際讀取的字節數。int length = is.read(b);while (length != -1) {fos.write(b, 0, length);length = is.read(b);}fos.close();} else {// 非文件字段。因為瀏覽器指定了以二進制的形式提交數據,// 那么就不能通過常規的手段獲取非File字段,// 即String fileName = request.getParameter("fileName");// 也不能通過常規的手段設置編碼格式// 即request.setCharacterEncoding("UTF-8");System.out.println("字段名:" + item.getFieldName());String value = item.getString();value = new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);System.out.println("字段值:" + value);}}// 在頁面中顯示上傳的圖片String html = "<img width='841' height='206' src='uploaded/%s' />";response.setContentType("text/html;charset=UTF-8");PrintWriter pw = response.getWriter();pw.format(html, filename);} }

5 顯示信息

輸入上傳的文件信息。

上傳文件后,跳轉的頁面。

命令行信息

總結

以上是生活随笔為你收集整理的【Servlet】servlet上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。