Servlet3.0-文件上傳


  Servlet3.0提供了對文件上傳的原生支持。

  使用注解@MultipartConfig將一個Servlet標識為支持文件上傳。

  Servlet3.0將multipart/form-data的POST請求封裝成Part,通過Part對上傳的文件進行操作。

  上傳文件的表單:

<form action="UploadServlet" method="post" enctype="multipart/form-data">
   		<tr>
   			<td>
   				<input type="file" name="file"><br>
   				<input type="submit">
   			</td>
   		</tr>
</form>

  處理文件上傳的Servlet:

package com.cndatacom.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
@MultipartConfig//標識Servlet支持文件上傳
public class UploadServlet extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//存儲路徑
		String storePath = request.getServletContext().getRealPath("/uploadFile");
		
		Part part = request.getPart("file");
		
		//Servlet3沒有提供直接獲取文件名的方法,需要從請求頭中解析出來
		//獲取請求頭
		String header = part.getHeader("content-disposition");
		//獲取文件名
		String fileName = parseFileName(header);
		
		//把文件寫到指定路徑
		part.write(storePath+File.separator+fileName);
		
		PrintWriter out = response.getWriter();
		out.println("上傳成功");
		out.flush();
		out.close();
	}
	
	/**
	 * 根據請求頭解析出文件名
	 * 請求頭的格式:form-data; name="file"; filename="a.txt"
	 * @param header
	 * @return
	 */
	public String parseFileName(String header) {
		return header.substring(header.lastIndexOf("=") + 2, header.length() - 1);
	}

}

  @MultipartConfig的屬性都是可選的:

  fileSizeThreshold:設置閾值,達到閾值后開始把文件寫到磁盤。

  location:      設置文件的存儲目錄。

  maxFileSize:    允許上傳文件的最大值,Byte為單位。

  maxRequestSize: multipart/form-data 請求允許的最大值。

  

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM