Code ví dụ chương trình download file với JSP – Servlet

Code ví dụ chương trình download file với JSP – Servlet

(Xem thêm: Tạo ứng dụng web đơn giản với JSP -Servlet)

Trong bài này chúng ta sẽ tìm hiểu cách trả về 1 file trên ứng dụng web.

Cơ chế của hành động download file là:

  • Client gửi 1 request tới server để tải file về
  • Server sẽ kiểm tra xem request đó yêu cầu lấy về file nào để đọc file đó lên (có thể từ database hoặc ổ cứng)
  • Server đọc file và ghi file đó ra response trả về cho client

Ví dụ chương trình download file với JSP – Servlet

Ví dụ chương trình download file với JSP - Servlet

Ví dụ chương trình download file với JSP - Servlet

Ví dụ chương trình download file với JSP - Servlet

Ví dụ chương trình download file với JSP - Servlet

Ví dụ chương trình download file với JSP - Servlet

Tạo file demo.txt với nội dung “stackjava.com” bên trong folder WebContent/file

Code ví dụ chương trình download file với JSP - Servlet

Trong servlet ta sẽ đọc file demo.txt ở trên và ghi nó ra response.

package stackajva.com.demodownload.servlet;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

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

@WebServlet(name = "download", urlPatterns = { "/download" })
public class DownloadServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
       
    public DownloadServlet() {
        super();
    }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletContext context = getServletContext();
    String fullPath = context.getRealPath("/file/demo.txt");

    Path path = Paths.get(fullPath);
    byte[] data = Files.readAllBytes(path);

    // Thiết lập thông tin trả về
    response.setContentType("application/octet-stream");
    response.setHeader("Content-disposition", "attachment; filename=demo.txt");
    response.setContentLength(data.length);
    InputStream inputStream = new BufferedInputStream(new ByteArrayInputStream(data));

    // Ghi file ra response outputstream. 
    OutputStream outStream = response.getOutputStream();
    byte[] buffer = new byte[4096];
    int bytesRead = -1;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
      outStream.write(buffer, 0, bytesRead);
    }
    inputStream.close();
    outStream.close();
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
  }

}

Chạy project trên:

 

Kết quả:

Code ví dụ chương trình download file với JSP – Servlet stackjava.com

Okay, Done!

Download code ví dụ trên tại đây

stackjava.com