java使用commons-fileupload實現文件上傳

servlet控制器代碼

package com.lee.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		
		//判斷前端是否有multipart
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);	//使用isMultipartContent獲取前端是否存在multipart
		if(isMultipart) {
			FileItemFactory factory = new DiskFileItemFactory();	//FileItemFactory是接口,DiskFileItemFactory是具體實現類
			ServletFileUpload upload = new ServletFileUpload(factory);	//初始化ServletFileUpload對象
			try {
				List<FileItem> items = upload.parseRequest(request);  //利用parseRequest解析form表單中的所有字段,並保存到List列表中
				for(FileItem item : items) {	//遍歷列表,上傳文件
					String path = request.getSession().getServletContext().getRealPath("upload");	//獲取upload的路徑,路徑可以通過getRealpath()獲取,也可以直接使用字符串寫死
					String fileName = item.getName();	//獲取文件名
					File file = new File(path,fileName);	//定義file對象,初始化上傳路徑和文件名稱
					item.write(file);
					System.out.println(fileName + " 上傳成功!");
				}
			} catch (FileUploadException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

jsp顯示層代碼

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

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


</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章