将文件以流的形式发送到前端
要让浏览器下载文件需要设置
Content-Disposition: attachment; filename=filename.ext
设置response响应头
resp.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(fileName, "UTF-8")); //注意:含有中文的文件名 需要给URL编码
完整代码
package com.wcy.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
//使用response实现文件的下载
public class Download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 获取文件资源路径
String filepath = this.getServletContext().getRealPath("/WEB-INF/classes/reg.jpg");
//2 从路径中分割出文件名
String fileName = filepath.substring(filepath.lastIndexOf('\\') + 1);
//3 设置浏览器支持下载
resp.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(fileName, "UTF-8")); //注意:含有中文的文件名 需要给URL编码
//4 获取文件的输入流
FileInputStream is = new FileInputStream(filepath);
//5创建缓冲区
int readCount = 0;
byte[] bytes = new byte[1024];
//6获取输出对象
ServletOutputStream os = resp.getOutputStream();
//7 将输入流通过缓冲区写到输入流传递给客户端
while ((readCount = is.read(bytes)) != -1) {
os.write(bytes, 0, readCount);
}
//关闭流
is.close();
os.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}