1. 程式人生 > >Servlet檔案上傳||@MultipartConfig標註屬性

Servlet檔案上傳||@MultipartConfig標註屬性

在Servlet3.0之前,處理上傳檔案的操作一直是讓開發者頭疼的問題,因為Servlet本身沒有對此提供直接的支援,需要使用第三方框架來實現,而且使用起來也不夠簡單。
Servlet3.0提供了對檔案上傳的支援,通過@MultipartConfig標註和HttpServletRequest的兩個新方法getPart()和getParts(),開發者能夠很容易實現檔案的上傳操作。

@MultipartConfig標註主要是為了輔助Servlet3.0中HttpServletRequest提供的對上傳檔案的支援。該標註寫在Servlet類的宣告之前,一表示該Servlet希望處理的請求時multipart/form-data型別的。另外,該標註還提供了若干屬性用於簡化對上傳檔案的處理。

@MultipartConfig標註屬性

fileSizeThershold         int型      是(可選)     描述:當前資料量大於該值時,內容將被寫入檔案。

location               String型           是(可選)     描述:存放生成檔案的地址

maxFileSize        long型             是(可選)     描述:允許上傳的檔案最大值,預設為-1,表示沒有限制

maxRequestSize    long型         是(可選)     描述:針對 multipart/form-data 請求的最大數量,預設為-1,表示沒有限制

<!--index.html檔案部分程式碼-->
<form action="/HelloWorld/UpLoad" method="post" enctype="multipart/form-data">
	<input type="file" name="file">
	<input type="submit" name="upload" value="上傳">
</form>

/*UpLoad.java為上傳檔案的Servlet類*/
package javaee.servlet;
import …………
//設定訪問活著呼叫這個Servlet的路徑
@WebServlet("/UpLoad")
//說明該Servlet處理的是multipart/form-data型別的請求
@MultipartConfig
public class UpLoad extends HttpServlet{
	private static final long serialVersionUID = 1L;
	public UpLoad(){
		super();
	}
	protected void doGet(HttpServletRequest request,HttpServletResponse response)
		throws ServletException,IOException{
		this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		//說明輸入的請求資訊採用UTF-8編碼方式
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		//Servlet3.0中新引入的方法,用來處理multipart/form-data型別編碼的表單
		Part part = request.getPart("file");
		//獲取HTTP頭資訊headerInfo=(form-data; name="file" filename="檔名")
		String headerInfo = part.getHeader("content-disposition");
		//從HTTP頭資訊中獲取檔名fileName=(檔名)
		String fileName = headerInfo.substring(headerInfo.lastIndexOf("=") + 2, headerInfo.length() - 1);
		//獲得儲存上傳檔案的資料夾路徑
		String fileSavingFolder = this.getServletContext().getRealPath("/UpLoad");
		//獲得儲存上傳檔案的完整路徑(資料夾路徑+檔名)
		//資料夾位置固定,資料夾採用與上傳檔案的原始名字相同
		String fileSavingPath = fileSavingFolder + File.separator + fileName;
		//如果儲存上傳檔案的資料夾不存在,則建立資料夾
		File f = new File(fileSavingFolder + File.separator);
		if(!f.exists()){
			f.mkdirs();
		}
		//將上傳的檔案內容寫入伺服器檔案中
		part.write(fileSavingPath);
		//輸出上傳成功資訊
		out.println("檔案上傳成功~!");
	}
}

/DownLoadjava為下載檔案的Servlet類*/
package javaee.servlet;
import …………
@WebServlet("/DownLoad")
public class DownLoad extends HttpServlet{
	private static final long serialVersionUID = 1L;
	public DownLoad(){
		super();
	}
	protected void doGet(HttpServletRequest request ,HttpServletResponse response)
			throws ServletException,IOException{
		this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException,IOException{
		try{
			//伺服器相對路徑
			String filepath = "WEB-INF/web.xml";
			//伺服器絕對路徑
			String fullFilePath = getServletContext().getRealPath(filepath);
			System.out.println(fullFilePath);
			/*開啟檔案,建立File型別的檔案物件*/
			File file = new File(fullFilePath);
			/*如果檔案存在*/
			if(file.exists()){
				System.out.println("檔案存在");
				/*獲得檔名,並採用UTF-8編碼方式進行編碼,以解決中文問題*/
				String filename = URLEncoder.encode(file.getName(), "UTF-8");
				System.out.println(filename);
				/*重置response物件*/
				response.reset();
				//設定檔案的型別,xml檔案採用text/xml型別,詳見MIME型別的說明
				response.setContentType("text/xml");
				//設定HTTP頭資訊中內容
				response.addHeader("Content-Disposition","attachment:filename=\"" + filename + "\"" );
				//設定檔案的長度
				int fileLength = (int)file.length();
				System.out.println(fileLength);
				response.setContentLength(fileLength);
				/*如果檔案長度大於0*/
				if(fileLength!=0){
					//建立輸入流
					InputStream inStream = new FileInputStream(file);
					byte[] buf = new byte[4096];
					//建立輸出流
					ServletOutputStream servletOS = response.getOutputStream();
					int readLength;
					//讀取檔案內容並寫到response的輸出流當中
					while(((readLength = inStream.read(buf))!=-1)){
						servletOS.write(buf, 0, readLength);
					}
					//關閉輸入流
					inStream.close();
					//重新整理輸出緩衝
					servletOS.flush();
					//關閉輸出流
					servletOS.close();
				}
			}else {
				System.out.println("檔案不存在~!");
				PrintWriter out = response.getWriter();
				out.println("檔案 \"" + fullFilePath + "\" 不存在");
			}
		}catch(Exception e){
			System.out.println(e);
		}
	}
}


相關推薦

Servlet檔案||@MultipartConfig標註屬性

在Servlet3.0之前,處理上傳檔案的操作一直是讓開發者頭疼的問題,因為Servlet本身沒有對此提供直接的支援,需要使用第三方框架來實現,而且使用起來也不夠簡單。Servlet3.0提供了對檔案上傳的支援,通過@MultipartConfig標註和HttpServle

·Servlet 檔案 FileUpload

·實現以下程式碼前需要在專案中新增jar包commons-fileupload-1.2.1.jar 和其支援jar包commons-io-1.4.jar(即使用commons-fileupload-1.2.1.jar的前提是載入commons-io-1.4.jar) package c

Servlet檔案(壓縮檔案、圖片等)

上傳檔案是指把客戶端的檔案傳送到伺服器端,當客戶端向伺服器上傳檔案時,客戶端傳送的HTTP請求正文采用“multipart/form-data”資料型別,它表示複雜的包含多個子部分的複合表單。比如,如下HTML程式碼中,就包含了普通的文字輸入框和兩個用於指定上傳檔案的檔案域。

Servlet檔案之FileItem類的常用方法

1.  boolean isFormField() isFormField方法用於判斷FileItem類物件封裝的資料是一個普通文字表單欄位,還是一個檔案表單欄位,如果是普通表單欄位則返回true,否則返回false。因此,可以使用該方法判斷是否為普通表單域,還是檔案上傳表

Servlet檔案

兩點要素: 1.表單提交方式必須是post 2.enctype要指定為multipart/form-data。 enctype的預設值是application/x-www-form-urlencoded, 這種編碼格式

檔案下載時,在form表單中設定屬性enctype=“multipart/form-data”的情況下,如何獲取表單提交的值?

一、問題描述 檔案上傳下載時,在form表單中設定屬性enctype=“multipart/form-data”的情況下,如何獲取表單提交的有關使用者資訊的值?(比如:textfield、radio等屬性中的值) 二、解決方法 1、情況一:沒有對user物件進行封裝 方法:

實際應用一:基於servlet和JavaScript FileReader實現簡單的檔案

在web專案中檔案上傳是十分平常的,對於檔案上傳之前用過幾種方法都比較實用。 一、基於Apache common fileupload 二、基於servlet和JavaScript FileReader 三、框架裡自帶的檔案上傳 他們各自適用於不同的場合個人認為:

js+jstl+servlet實現檔案、列表展示及檔案下載

檔案上傳 1.upload.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert

servlet實現檔案

一、Servlet實現檔案上傳,需要新增第三方提供的jar包 下載地址: 1) commons-fileupload-1.2.2-bin.zip      :   點選開啟連結

Servlet & JSP 檔案

1.介紹: 檔案上傳是將客戶端的一個或多個檔案傳輸到伺服器上儲存。 2.客戶端要求: 實現檔案上傳首先需要在客戶端的HTML頁面中通過一個表單開啟一個檔案,然後提交給伺服器。上傳檔案表單的<form>標籤中應該指定enctype屬性,它的值應該為"multi

Java Servlet實現檔案並讀取Zip壓縮包中檔案的真實型別

1.上傳檔案servlet PS: 使用ant.jar中的 org.apache.tools.zip.ZipEntry 物件,防止亂碼 package com.chenl.servlets; import java.io.File; import java.io.IOExcep

servlet組建檔案

表單上傳,普通欄位和檔案都可以接收,返回檔案上傳後的路徑 public static String upload(HttpServletRequest request, HttpServletResponse response) throws ServletExcept

Servlet實現檔案詳解與實戰

    檔案上傳 1.客戶端程式設計 要上傳檔案,必須利用mutipart/form-data 設定HTML表單的enctype 屬性值 <form action="action"  enctype="mutipart/form-data"  method="po

servlet 3.0 檔案下載

1.需求場景 利用servlet3.0 實現檔案上傳 2.專案環境 servlet  jsp  javabean 3.功能實現 package com.demo.action; import java.io.File; import java.io.IOExceptio

jsp+servlet和SSM分別是如何實現檔案(示例)

以下是jsp+servlet和SSM分別是如何實現檔案上傳的方法示例 兩種模式的upload.jsp檔案都一樣,(注意要加上enctype=”multipart/form-data”)如下: <

servlet實現form表單的檔案

注:該方法需要用到commons-fileupload-1.2.2.jar和commons-io-2.4.jar兩個包,自行下載。 首先,需要在form表單中設定enctype="multipart/form-data"屬性,就能實現檔案上傳,但是由於enctype="multipart/form-data

Jsp+Servlet實現檔案下載——前臺頁面開發

       JSP和Servlet都是J2EE的規範,JSP全名為Java Server Pages,中文名叫java伺服器頁面,它是在傳統的網頁HTML檔案中插入Java程式段(Scriptlet

jsp/servlet如何進行檔案

檔案上傳 環境搭建 a) 導包: commons-fileupload-xxx.jar commons-io-xxx.jar b) 在jsp頁面配置

java/struts/Servlet檔案下載與ftp檔案下載

String s1=transUrl; // transUrl是前臺接受的引數,get接受的引數tomcat一律使用iso-8859-1編碼 transUrl=new String(transUrl.getBytes("ISO-8859-1"),"utf-8");//程式中要使用的檔名,必須轉換為gbk

Servlet實現檔案的幾種方法

1. 通過getInputStream()取得上傳檔案。 /** * To change this template, choose Tools | Templates * and open the template in the editor. */ package