springboot返回文件流给前端
springboot返回文件
·
一. Controller类
public ResponseEntity<InputStreamResource> downReport(HttpServletResponse httpServletResponse, @RequestBody DataVerifyReportPaging param){
ResponseEntity<InputStreamResource> report = xyReportService.downReport(httpServletResponse, param);
return report;
}
二. Service类
/**
*
* @param response
* @param filePath 文件绝对路径
* @param fileName 文件名
* @throws IOException
*/
public void download(HttpServletResponse response, String pdfPath, String fileName) throws IOException {
// 设置信息给客户端不解析
String type = new MimetypesFileTypeMap().getContentType(pdfPath);
// 设置contenttype,即告诉客户端所发送的数据属于什么类型
response.setHeader("Content-type",type);
// 设置编码
String code = new String(fileName.getBytes("utf-8"), "iso-8859-1");
// 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
response.setHeader("Content-Disposition", "attachment;filename=" + code);
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
download(pdfPath, response);
}
public void download(String pdfPath, HttpServletResponse res) throws IOException {
// 发送给客户端的数据
// 读取filename
File file = new File(pdfPath);
long length = file.length();
res.addHeader("Content-Length",String.valueOf(length));
OutputStream outputStream = res.getOutputStream();
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
FileInputStream inputStream = new FileInputStream(file);
bis = new BufferedInputStream(inputStream);
int i = bis.read(buff);
while (i != -1) {
outputStream.write(buff, 0, buff.length);
outputStream.flush();
i = bis.read(buff);
}
bis.close();
outputStream.close();
}
更多推荐
已为社区贡献2条内容
所有评论(0)