Lập trình web với Jsp/Servlet – Bài 3 : Upload File với Servlet

Tiếp tục với loạt bài hướng dẫn lập trình web với jsp/servlet,hôm nay sẽ tìm hiểu một trong những kiến thức luôn được sử dụng đối với lập trình web nói chung và java web jsp servlet nói riêng.Vậy đó là gì?

Một ngày đẹp trời các bạn vào facebook,và đôi lúc các bạn lướt tin để xem và đọc tin tức,không thì chém gió chát chít lung tung ,và vô tình các bạn thấy những hình ảnh của những cô em chân dài,xinh tươi như  như thế này :

Lập trình web với Jsp/Servlet - Bài 3 : Upload File với Servlet

Hay đôi lúc các bạn cũng cần tải những hình ảnh hay là upload ảnh tự sướng,đăng ảnh thả thính đúng ko,như này :

Lập trình web với Jsp/Servlet - Bài 3 : Upload File với Servlet

Vậy đến đây bạn đọc cũng có thể đoán được bài viết này tôi nói về vấn đề gì rồi đúng ko,đó chính là Upload File trong servlet,một trong những phần mà không thể thiếu được trong một ứng dụng web.

Upload File là gì?

Upload file là quá trình chúng ta upload những hình ảnh từ dưới máy tính lên web server.

Cách upload file với servlet

Upload file trong servlet có rất nhiều cách,các bạn có thể dùng thư viện để upload một ảnh lên web servlet,hoặc các bạn có thể dùng code để thực hiện mà ko cần dùng đến thư viện trong jsp/servlet…Ở bài này tôi sẽ hướng dẫn các bạn cách để upload file dùng thư viện nhé,cái gì có sẵn thì nó tương đối dễ dàng hơn.Tuy nhiên những bài viết sau nếu có thời gian tôi sẽ hướng dẫn các bạn cách để upload file không cần đến thư viện.Các bạn có thể tham khảo trước tại đây.

Để tiến hành upload file lên web server được các bạn cần chuẩn bị cho mình những điều kiện  cần như sau :

  1. Download  thư viện apache common-io  .Tại đây.
  2. Download  thư viện commons-fileupload .Tại đây.
  3. Form upload file phải có thuộc tính enctype=”multipart/form-data”
  4. Form upload file method = “post”

Đặt 2 thư viên vừa download vào trong thư mục WEB-INF :

lap-trinh-web-voi-jspservlet-bai-3-upload-file-voi-servlet2

Tiếp theo tạo file uploadfile.jsp đây chính là view trong mô hình MVC với lập trình web  jsp/servlet ,tất cả những tài nguyên đều được đặt trong WebContent:

uploadfile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Upload file in servlet - itphutran.com</title>
</head>
<body>
	<div>
		<h1>Upload file in servlet</h1>
		<form action="<%=request.getContextPath()%>/uploadFile" method="post" enctype="multipart/form-data" >
			<label>Upload file : </label>
			<input type="file" value="Upload file" name="hinhanh"  /> <br />
			<input type="submit" value="Thực hiện" name="thuchien"  />
		</form>
	</div>
</body>
</html>

Tạo file UploadFileController.java

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();
		}
	}

}

Đầu tiên khi chạy ứng dụng web java thì file uploadfile.jsp chúng ta cho chạy đầu tiên,trong file này cần chú ý đến action và method phải là post,ở bài trước tôi đã nói rất kỹ,nếu bạn nào chưa xem có thể xem lại đây.Nếu có xử lý upload file các bạn cần có thuộc tính enctype=”multipart/form-data”.

Khi nhấn nút submit method doPost() của servlet sẽ xử lý và tiến hành upload file lên web server.Ở trên,tôi in ra đường dẫn những file khi được upload thì nó sẽ nằm trong thư mục files do chúng ta tao ra.Ok.Bây giờ tiến hành chạy dự án web :

lap-trinh-web-voi-jspservlet-bai-3-upload-file-voi-servlet1

Chọn hình ảnh và tiến hành upload file lên web server,sau khi nhấn nút thực hiện sẽ in ra được những dòng ở console như sau :

UPLOAD THÀNH CÔNG...!
ĐƯỜNG DẪN KIỂM TRA UPLOAD HÌNH ẢNH : 
E:\project\tranningsp\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\uploadfile\files

Copy đường dẫn trên và kiểm tra :

 

Tuy nhiên sẽ có một trường hợp xảy ra rằng khi các bạn upload file trùng file cũ thì nó sẽ ghì đè lên hình ảnh cũ,về thực tế chắc chắn rằng sẽ có những hình ảnh trùng tên file,vậy làm sao đổi tên file,thì mình đã có một bài viết khá cụ các bạn có thể tham khảo.

Tổng kết :

Trong loạt bài hướng dẫn lập trình web với jsp/servlet,đây là một trong những phần kiến thức rất quan trọng vì trong thực tế với một ứng dụng web luôn luôn có,vì vậy việc upload file lên web server cần phải biết cách thực hiện,trong quá trình thực hiện nếu có gì error các bạn comment bên dưới,mình sẽ giúp các bạn nhé.Chúc các bạn học tốt.

 

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