SpringMVC 文件下载
第一种方法使用 HttpMessageConverter 下的 ResponseEntity<> 实现。
@RequestMapping("/testHttpMessageDown")
public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException{
String filename = "123.jpg";
//根据不同浏览器处理下载时文件名乱码问题
if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
filename = URLEncoder.encode(filename, "UTF-8");
} else {
filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}
byte[] body = null;
InputStream is = request.getSession().getServletContext().getResourceAsStream("/upload/user/JSON.jpg");
body = new byte[is.available()];
is.read(body);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attchement;filename=" + filename);
HttpStatus statusCode = HttpStatus.OK;
ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
return entity;
}
第二种方法是常用的文件下载方式
@RequestMapping("/testFileDown")
public void fileDownload(HttpServletRequest request, HttpServletResponse response) throws IOException{
String filename = "这是中文名称123abc()()-234十几分.pdf";
//根据不同浏览器处理下载时文件名乱码问题
if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
filename = URLEncoder.encode(filename, "UTF-8");
} else {
filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}
// response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;fileName="+filename);
InputStream is = request.getSession().getServletContext().getResourceAsStream("/upload/中文名称的文件名.pdf");
OutputStream os = response.getOutputStream();
byte[] b = new byte[1024];
int length = 0;
while((length = is.read(b)) > 0){
os.write(b);
}
os.flush();
os.close();
is.close();
}

浙公网安备 33010602011771号