Download File với Java Servlet

Download file với java servlet là một trong những bài viết có trong loạt bài hướng dẫn lập trình web với jsp/servlet của mình .Như các bạn đã biết cách để upload file với servlet lên server,khi tiến hành upload thì cũng có thể download từ server xuống máy chủ.

Qua bài viết này, người dùng có thể tải về các tập tin (download file) bằng cách nhấp vào một liên kết trỏ đến URL servlet. Điều này sẽ rất hữu ích cho việc thực hiện chức năng download file trong ứng dụng web của bạn sử dụng java servlet.

Các bước tiến hành download file với servlet:

Các bước điển hình như sau:

  1. Đọc các tập tin trên máy chủ sử dụng FileInputStream lớp.
  2. Xác định dạng MIME của tập tin bằng cách:
    • Lấy ServletContext qua phương thức getServletContext ()  .
    • Gọi phương thức getMimeType (String file) trên ServletContext đối tượng để có được dạng MIME của tập tin.
  3. Thiết lập các thông tin sau cho đối tượng HttpResponse :
    • Thiết lập kiểu nội dung cho các loại MIME lấy ra, bằng cách gọi phương thức setContentType (String) . Điều đó nói cho các trình duyệt hiểu để download file.
    • Đặt chiều dài nội dung  bằng cách gọi phương thức setContentLength (int) (nếu có).
  4. Lấy đối tượng OutputStream.
  5. Đọc mảng byte từ FileInputStream , sau đó ghi chúng vào OutputStream . Lặp lại cho đến khi không có byte sẵn để đọc (cuối tập tin).
  6. Đóng cả FileInputStream và OutputStream.

Code các file có trong project

Và sau đây là mã của các file :

DownloadFileController.java:

package com.itphutran.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

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

/**
 * Servlet implementation class UploadFileController
 */
public class DownloadFileController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public DownloadFileController() {
		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 {
		if (Integer.parseInt(request.getParameter("download")) == 1) {
			OutputStream out = response.getOutputStream();
			String my_file = request.getServletContext().getRealPath("")
					+ File.separator + "files" + File.separator + "readme.txt";
			response.setContentType("text/html");
			response.setContentType("APPLICATION/OCTET-STREAM");
			response.setHeader("Content-Disposition",
					"attachment; filename=itphutran.txt");
			FileInputStream in = new FileInputStream(my_file);
			byte[] buffer = new byte[4096];
			int length;
			while ((length = in.read(buffer)) > 0) {
				out.write(buffer, 0, length);
			}
			in.close();
			out.flush();
		}
	}

}

Cấu hình ánh xạ URL cho servlet này trong việc triển khai web mô tả tập tin web.xml như sau:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>uploadfile</display-name>
	<servlet>
		<servlet-name>DownloadFileController</servlet-name>
		<servlet-class>com.itphutran.controller.DownloadFileController</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>DownloadFileController</servlet-name>
		<url-pattern>/DownloadFileServlet</url-pattern>
	</servlet-mapping>
</web-app>

Tạo trang downloadFile.jsp và ánh xạ tới url đã mapping :

<%@ 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>Download File Servlet - Blog IT Phu Tran</title>
</head>
<body>
	<h1>Download File In Java Servlet - Blog IT Phu Tran</h1>
   	 Click vào đây để download File:
    <a href="${pageContext.request.contextPath}/DownloadFileServlet">Download Link</a>
</body>
</html>

Quy trình chạy dự án :

Đầu tiên upload một file bất kỳ lên :

Download File với Servlet- buoc1.png

 

 

 

 

 

 

 

 

Sau đó tiến hành upload một file bất kỳ và kiểm tra trong thư mục chứa các file tải lên đã có chưa.

 

Download File với Servlet- buoc2.png

Lưu ý : Vì ở đây chúng ta fix cứng đường dẫn file cũng như tên file nên các bạn chú ý sửa lại tên cho đúng tại file DownloadFileController.Những bài sau mình sẽ viết các bài upload và download file và lưu vào cơ sở dữ liệu (database).

Download File với Servlet- buoc3.png

Chạy file downloadFile.jsp :

Download File với Servlet- buoc4

 

Bài hướng dẫn download file với java servlet kết thúc tại đây nhé.Chúc các bạn thực hiện thành công!

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