【Servlet】servlet上传文件
生活随笔
收集整理的這篇文章主要介紹了
【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"。
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上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql 手机归属地_PHP手
- 下一篇: visibility的用法