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
Tạo file demo.txt với nội dung “stackjava.com” bên trong folder WebContent/file
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