spring mvc如何下载文件呢?
spring mvc怎么下载图片呢?
有两种方式:
方式一:使用注解@ResponseBody
@ResponseBody
@RequestMapping(value = "/download",produces="image/jpeg")
public byte[] downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2,boolean isInline)
throws IOException {
byte[]bytes=FileUtils.getBytes4File("D:\\Temp\\cc.jpg");
// response.addHeader("Content-Disposition", downloadType+";filename=\"a.jpg\"");
WebServletUtil.setDownloadContentDisposition(isInline, "c.jpg", response);
return bytes;
}
WebServletUtil.setDownloadContentDisposition 的实现如下:
/***
* spring MVC下载文件设置的Content-Disposition
* @param isInline
* @param fileName
* @return
*/
public static String getContentDisposition(boolean isInline,String fileName){
String downloadType=null;
if(isInline){
downloadType=Constant2.CONTENT_DISPOSITION_INLINE;
}else{
downloadType=Constant2.CONTENT_DISPOSITION_ATTACHMENT;
}
if(ValueWidget.isNullOrEmpty(fileName)){
fileName="name_not_specified";
}
String format=downloadType+";filename=\""+fileName+"\"";
return format;
}
/***
* 下载文件(或内联显示)时设置Content-Disposition
* @param isInline
* @param fileName
* @param response
*/
public static void setDownloadContentDisposition(boolean isInline,String fileName, HttpServletResponse response){
response.addHeader(Constant2.CONTENT_DISPOSITION, WebServletUtil.getContentDisposition(isInline, fileName));
}
注意:(1)一定要通过@RequestMapping注解的produces 设置response 的content type;
(2)设置应答头时要使用addHeader,而不是setHeader
方式二:使用ResponseEntity
@RequestMapping(value = "/download3")
public ResponseEntity<byte[]> download() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
// headers.setContentDispositionFormData("inline", "dict.jpg");//attachment
headers.set(Constant2.CONTENT_DISPOSITION,WebServletUtil.getContentDisposition(true, "dict.jpg"));
return new ResponseEntity<byte[]>(FileUtils.getBytes4File("D:\\Temp\\cc.jpg"),
headers, HttpStatus.CREATED);
}
/***
* favicon.ico
* @throws IOException
*/
@RequestMapping(value = "/favicon.ico")
public ResponseEntity<byte[]> faviconIco(HttpServletRequest request) throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
String faviconIcoName="sms-4.ico";
headers.set(Constant2.CONTENT_DISPOSITION,WebServletUtil.getContentDisposition(true, faviconIcoName));
///home/whuang/software/apache-tomcat-7.0.53/webapps/ROOT/
String webappPath=null;
if(WebServletUtil.isLocalIp(request)){//服务器在本机(访问ip为127或localhost)
webappPath=WebServletUtil.getRealPath(request);
}else{
webappPath=DictionaryParam.get(Constant2.DICTIONARY_GROUP_GLOBAL_SETTING, "WEB-INF_LOC");
}
return new ResponseEntity<byte[]>(FileUtils.getBytes4File(
webappPath
+"WEB-INF/static/img/"+faviconIcoName),
headers, HttpStatus.CREATED);
}
注意:不要使用headers.setContentDispositionFormData 来设置Content-Disposition