Giới hạn kích thước Upload File trong Java Servlet

Upload file trong java servlet là một trong những phần mà trong mỗi dự án không thể thiếu,nhưng đôi khi chúng ta muốn giới hạn kích thước khi upload file để tránh trường hợp người dùng tải một hình ảnh có dung lượng quá lớn…Vậy trong bài này,tôi sẽ hướng dẫn các bạn cách để upload hình ảnh trong java có giới hạn kích thước file.

Nếu bạn nào chưa xem bài hướng dẫn cách upload file thì xem tại đây nhé.

Giới hạn kích thước Upload File

Tôi sẽ lấy ví dụ bài 3 để làm tiếp tục làm demo ở bài này,như vậy ngay tại file UploadFileController.java chúng ta đã xử lý để upload file như sau :

package com.itphutran.controller;
 
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
/**
 * Servlet implementation class UploadFileController
 */
@WebServlet("/uploadFile")
public class UploadFileController extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public UploadFileController() {
		super();
	}
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// xử lý upload file khi người dùng nhấn nút thực hiện
		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
		try {
			List<FileItem> fileItems = upload.parseRequest(request);
			for (FileItem fileItem : fileItems) {
				if (!fileItem.isFormField()) {
					// xử lý file
					String nameimg = fileItem.getName();
					if (!nameimg.equals("")) {
						String dirUrl = request.getServletContext()
								.getRealPath("") + File.separator + "files";
						File dir = new File(dirUrl);
						if (!dir.exists()) {
							dir.mkdir();
						}
						String fileImg = dirUrl + File.separator + nameimg;
						File file = new File(fileImg);
						try {
							fileItem.write(file);
							System.out.println("UPLOAD THÀNH CÔNG...!");
							System.out.println("ĐƯỜNG DẪN KIỂM TRA UPLOAD HÌNH ẢNH : \n"+dirUrl);
						} catch (Exception e) {
							System.out.println("CÓ LỖ TRONG QUÁ TRÌNH UPLOAD!");
							e.printStackTrace();
						}
					}
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
	}
 
}

Đoạn code trên chỉ để upload một file bất kỳ lên web server,vậy nếu các bạn muốn giới hạn kích thước file khi upload chỉ cần thêm vào một hằng số MAX_FILE_SIZE.

package com.itphutran.controller;

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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadFileController
 */
@WebServlet("/uploadFile")
public class UploadFileController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public UploadFileController() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// xử lý upload file khi người dùng nhấn nút thực hiện
		final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(fileItemFactory);

		// sets maximum size of upload file
		upload.setFileSizeMax(MAX_FILE_SIZE);

		try {
			List<FileItem> fileItems = upload.parseRequest(request);
			for (FileItem fileItem : fileItems) {
				if (!fileItem.isFormField() && fileItems.size() > 0) {
					// xử lý file
					String nameimg = fileItem.getName();
					if (!nameimg.equals("")) {
						String dirUrl = request.getServletContext()
								.getRealPath("") + File.separator + "files";
						File dir = new File(dirUrl);
						if (!dir.exists()) {
							dir.mkdir();
						}
						String fileImg = dirUrl + File.separator + nameimg;
						File file = new File(fileImg);
						if (fileItem.getSize() <= upload.getSizeMax()) {

							try {
								fileItem.write(file);
								System.out.println("UPLOAD THÀNH CÔNG...!");
								System.out
										.println("ĐƯỜNG DẪN KIỂM TRA UPLOAD HÌNH ẢNH : \n"
												+ dirUrl);
							} catch (Exception e) {
								System.out
										.println("CÓ LỖ TRONG QUÁ TRÌNH UPLOAD!");
								e.printStackTrace();
							}
						}
					}
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
	}

}

Đầu tiên chúng ta khởi tạo hằng số final int MAX_FILE_SIZE = 1024 * 1024 * 40; nó tương ứng với 40MB.,nghĩa là người dùng chỉ được cho phép upload file <= 40MG.Vậy chúng ta cần kiểm tra nếu file của người dùng tải lên bé hơn hoặc bằng MAX_FILE_SIZE thì mới tiến hành upload file lên server.

 

if (fileItem.getSize() <= upload.getSizeMax()) {// thực hiện quá trình upload file}

Như vậy là xong!

Như vậy chỉ cần thêm vài dòng code,chúng ta đã có thể giới hạn người dùng upload một file lên server tránh trường hợp tải lên file quá lớn.Hẹn gặp lại các bạn ở những bài tiếp theo.Done!

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
x