Java Web通过Servlet实现文件下载

我们主要使用请求头Content-disposition来激活浏览器文件下载对话框,并将服务器的文件传输到客户端。

package cn.hestyle.web.servlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

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

/**
 * Servlet implementation class DownFileServletDemo
 */
@WebServlet("/DownFileServletDemo")
public class DownFileServletDemo extends HttpServlet {
	/**
	 * 处理前端get请求
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		//step1:设置下载文件的绝对路径
		String fileName = "文件传输测试.txt";
		String filePath = "C:\\Users\\27654\\Desktop\\" + fileName;
		//step2:打开文件
		FileInputStream fis = new FileInputStream(filePath);
		//step3:设置请求头,文件名中含有中文需要UTF-8编码(如果不设置会出现中文文件名乱码)
		fileName = URLEncoder.encode(fileName, "UTF-8");
		//step4:设置Content-disposition请求头激活文件下载对话框,后面是文件名
		response.setHeader("Content-disposition", "attachment;filename=" + fileName);
		//step5:设置缓冲区的大小
		int len = 0;
		byte[] bs = new byte[1024];
		//step6:打开响应体的输出流,并将文件内容输出到客户端
		ServletOutputStream sos = response.getOutputStream();
		while((len = fis.read(bs)) != -1){
			sos.write(bs, 0, len);
		}
		//关闭文件流
		fis.close();
	}

	/**
	 * 处理前端的post请求
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		doGet(request, response);
	}

}

运行结果:
Java Web通过Servlet实现文件下载_第1张图片
Java Web通过Servlet实现文件下载_第2张图片
注意:在服务器端打开的文件流需要手动释放关闭,但是Servlet的响应的输出流不需要手动关闭,它会自动关闭。

你可能感兴趣的:(Java,#,Servlet)