java后台生成文件给前端下载(response输出流)
1、设置 ContentType
response.setContentType("application/x-download");
2、设置文件名,并指定编码格式
fileName = URLEncoder.encode("浏览器要显示的文件名", "UTF-8");
response.setCharacterEncoding("UTF-8");
3、将文件名 addHeader
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
4、读取文件流写入 response
File file = new File(filePath); try { InputStream stream = new FileInputStream(file); ServletOutputStream out = response.getOutputStream(); byte buff[] = new byte[1024]; int length = 0; while ((length = stream.read(buff)) > 0) { out.write(buff,0,length); } stream.close(); out.close(); out.flush(); } catch (IOException e) { e.printStackTrace(); }
controller 接口下载文件简单案例
@RestController @RequestMapping("/test") public class TestController {
@GetMapping("/download") public void download(HttpServletResponse response) throws UnsupportedEncodingException { String filename = URLEncoder.encode("文件名.jpg", "UTF-8"); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment;filename=" + filename);//浏览器上提示下载时默认的文件名 try (ServletOutputStream out = response.getOutputStream(); InputStream stream = new FileInputStream("D:\\最新测试.xls")){//读取服务器上的文件 byte buff[] = new byte[1024]; int length = 0; while ((length = stream.read(buff)) > 0) { out.write(buff,0,length); } stream.close(); out.close(); out.flush(); } catch (IOException e) { e.printStackTrace(); } } }