国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Servlet 3.0 文件上傳

2019-11-06 06:22:24
字體:
供稿:網(wǎng)友

Servlet 3.0 文件上傳

MultipartConfig注解

我們需要注釋的文件上傳處理Servlet與multipartconfig標注處理multipart/form-data的請求,用于上傳文件到服務器。

Multipartconfig注解具有以下屬性:

fileSizeThreshold: 我們可以指定大小的閾值后,該文件將被寫入磁盤。大小值是字節(jié),所以1024 * 1024 * 10是MB。

location: 文件將被存儲在目錄默認路徑下,它的默認值是“”。

maxFileSize: 最大允許上傳文件的大小,它的值是以字節(jié)形式提供的。它的默認值是-1L意味著無限的。

maxRequestSize: 允許的最大值為multipart/form-data的請求。默認值為-1L,意味著無限的。

@MultipartConfig(fileSizeThreshold=1024*1024*10, // 10 MB maxFileSize=1024*1024*50, // 50 MB maxRequestSize=1024*1024*100) // 100 MB

Part類

在線API文檔:

http://docs.Oracle.com/javaee/6/api/javax/servlet/http/Part.html

常用方法:

void delete() //刪除文件項的基礎存儲,包括刪除任何相關的臨時磁盤文件。java.util.Collection<java.lang.String> getHeaderNames() //獲取此部分的標頭名稱。java.util.Collection<java.lang.String> getHeaders(java.lang.String name) //獲取給定名稱的部分標頭的值。java.io.InputStream getInputStream() //獲取標頭內(nèi)容的輸入流java.lang.String getName() //獲取此部分的名稱。long getSize() //返回該文件的大小。void write(java.lang.String fileName) //將上傳文件寫入到磁盤方便的方法
java.lang.String getContentType() //獲取文件內(nèi)容的類型。

1


java.lang.String getHeader(java.lang.String name) //以字符串的形式返回指定的MIME標頭的值。

2


JavaEE 7新增了一個方法:

String getSubmittedFileName() //獲取由客戶端指定的文件名

3


上傳單個文件

upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>上傳圖片</title></head><body><div> <p>請選擇上傳需要上傳的文件</p> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="filename"/><br /> <button type="submit" >提交</button> </form> <p>${ msg}</p></div></body></html>

UploadServlet.java

import java.io.IOException;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;/** * Servlet implementation class UploadServlet */@WebServlet("/UploadServlet")@MultipartConfig(location="f://") //指定文件保存在F://目錄下public class UploadServlet extends HttpServlet { PRivate static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //拿到請求的part部件 Part part = request.getPart("filename"); String disposition = part.getHeader("content-disposition"); //截取到文件的名字 String name = disposition.substring(disposition.lastIndexOf("http://") + 1, disposition.lastIndexOf(".")); //截取到文件名的后綴 String suffix = part.getSubmittedFileName().substring(part.getSubmittedFileName().lastIndexOf(".")); //隨機生成一個UUID String uuid = UUID.randomUUID().toString(); //保存到f://目錄下 part.write(uuid + name + suffix); request.setAttribute("msg", "上傳成功!"); request.getRequestDispatcher("upload.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}

選擇一張圖片上傳

4


5


上傳成功后保存在F:盤下

6


上傳多個文件(推薦使用)

upload.jsp

這時候要添加多個input標簽

<div> <p>請選擇上傳需要上傳的文件</p> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="filename"/><br /> <input type="file" name="filename"/><br /> <input type="file" name="filename"/><br /> <button type="submit" >提交</button> </form> <p>${ msg}</p></div>

UploadServlet.java

import java.io.IOException;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;/** * Servlet implementation class UploadServlet */@WebServlet("/UploadServlet")@MultipartConfig(location="f://") //指定文件保存在F://目錄下public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //遍歷所有的part部件 for (Part part : request.getParts()) { String disposition = part.getHeader("content-disposition"); //截取到文件的名字 String name = disposition.substring(disposition.lastIndexOf("http://") + 1, disposition.lastIndexOf(".")); //截取到文件名的后綴 String suffix = part.getSubmittedFileName().substring(part.getSubmittedFileName().lastIndexOf(".")); //隨機生成一個UUID String uuid = UUID.randomUUID().toString(); part.write(uuid + name + suffix); request.setAttribute("msg", "上傳成功!"); } request.getRequestDispatcher("upload.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}

選擇3個文件同時上傳

7


上傳成功后保存在F:盤下

8


解決多文件上傳時會出現(xiàn)的異常

剛剛已經(jīng)演示過上傳多個文件,在三個input框中都選擇了需要上傳的文件,測試時是可以正常上傳的。

但是如果在上傳多個文件的時候,故意有一個input框未選擇文件會發(fā)什么呢?

9


點擊提交的時候就會報錯:

10


原因是因為

在截取文件名的時候找不到最后一個“/”form-data; name="filename"; filename=""

11


這時需要改造一下代碼,加一些邏輯判斷

//遍歷所有的part部件for (Part part : request.getParts()) { //如果表單文件名不為空,才執(zhí)行下列操作 if(!part.getSubmittedFileName().equals("")){ String disposition = part.getHeader("content-disposition"); System.out.println(disposition); //截取到文件的名字 String name = disposition.substring(disposition.lastIndexOf("http://") + 1, disposition.lastIndexOf(".")); //截取到文件名的后綴 String suffix = part.getSubmittedFileName().substring(part.getSubmittedFileName().lastIndexOf(".")); //隨機生成一個UUID String uuid = UUID.randomUUID().toString(); part.write(uuid + name + suffix); request.setAttribute("msg", "上傳成功!"); }}

再次提交單個文件的時候就不會出現(xiàn)異常了

12


上傳成功后保存在F:盤下

13


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 勐海县| 鸡泽县| 建德市| 铜鼓县| 普兰店市| 潞西市| 孝感市| 淳安县| 高州市| 买车| 汉源县| 容城县| 阜宁县| 张家界市| 班玛县| 稷山县| 塘沽区| 信丰县| 乐陵市| 信宜市| 松原市| 敖汉旗| 太保市| 夏河县| 安多县| 青神县| 九龙坡区| 柳江县| 司法| 永德县| 威海市| 保德县| 上林县| 昭苏县| 定南县| 墨竹工卡县| 平邑县| 登封市| 晋江市| 仪陇县| 化隆|