Servlet笔记2-文件上传
Servlet上傳文件:
Servlet 3.0改進了部分API,其中HttpServletRequest增加了對文件上傳的支持。
HttpServletRequest提供了兩個方法來處理文件上傳:
1.Part getPart(String name):根據名稱來獲取文件上傳域
2.Collection<Part> getParts():獲取所有的文件上傳域
上面兩個方法的返回值都涉及一個API:Part,每個Part對象對應于一個文件上傳域,該對象提供了很多方法來范文上傳文件的文件類型、大小、輸入流等,并提供了一個write(String file)方法將上傳文件寫入服務器磁盤。
向服務器上傳文件,表單里要使用<input type="file" .../>,并且,上傳文件一定要為表單域設置enctype屬性。
表單的enctype屬性指的是表單數據的編碼方式,該屬性有三個值:
1.application/x-www-form-urlencoded:默認的編碼方式,只處理表單域里的value屬性值,采用這種編碼方式的表單會將表單域的值處理成URL編碼方式
2.multipart/form-data:這種編碼方式會以二進制流的方式來處理表單數據,這種編碼方式會把文件域指定文件的內容也封裝到請求參數里
3.text/plain:這種編碼方式當表單的action屬性為mailto:URL的形式時比較方便,這種方式主要適用于直接通過表單發送郵件的方式
文件上傳示例:
頁面jsp:
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2018/1/4Time: 16:46To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Servlet文件上傳</title> </head> <body><form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">普通參數:<input type="text" name="inputText" ><br>選擇文件:<input type="file" name="file" ><br><input type="submit" value="上傳"></form> </body> </html>Servlet程序:
/*** Description:servlet* Author: Eleven* Date: 2018/1/13 16:23*/ @WebServlet(name="upload",urlPatterns = "/upload") @MultipartConfig //處理文件上傳的Servlet,必須要加此注解 public class UploadServlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//解決接收參數為中文亂碼的問題request.setCharacterEncoding("UTF-8");//解決向頁面輸出內容為亂碼,即使用out.println()的時候response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();//獲取普通請求參數String inputText = request.getParameter("inputText");System.out.println("普通的參數為:"+inputText);//獲取文件上傳域Part part = request.getPart("file");//文件的上傳類型System.out.println("文件的上傳類型:"+part.getContentType());//文件上傳的大小System.out.println("上傳文件的大小:"+part.getSize());//文件上傳域的Header NameCollection<String> headerNames = part.getHeaderNames();//遍歷文件上傳域的Header Name Valuefor(String headerName:headerNames){System.out.println(headerName+"---->"+part.getHeader(headerName));}//獲取包含原始文件名的字符串String fileNameInfo = part.getHeader("content-disposition");//提取上傳文件的文件名String fileName = fileNameInfo.substring(fileNameInfo.indexOf("filename=\"")+10,fileNameInfo.length()-1);//將文件寫入服務器磁盤 保存在web應用根路徑下的upload文件下part.write(getServletContext().getRealPath("upload")+"/"+fileName);out.println("文件上傳成功!");}}?
對于傳統的文件上傳需要借助common-fileupload等工具,處理起來有點復雜,借助Servlet 3.0的API,處理文件就變得比較簡單了。
?
轉載于:https://www.cnblogs.com/eleven258/p/8286650.html
總結
以上是生活随笔為你收集整理的Servlet笔记2-文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 卡方检验、克雷姆值
- 下一篇: jQuery笔记---选择器