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