前言
本地下载文件其实之前就接触过,但是一直存在疑问就是下载必须打开新的窗口,通过ajax请求无法达到下载文件的目的,所以一般对于异常的捕捉我自定义反应在界面上我通常都是再写一个接口,把各种异常都考虑到,然后执行新的下载命令。如果有更好的方法可以告知我,本篇主要讲的就是下载文件的两种方式以及将图片展示在浏览器中。当然这两种实现都离不开response的设置。
内容
通过浏览器展示图片
目前公司是有这方面的需求的,将图片下载到了本地,但是并不在图片服务器上,也不再项目的根目录下,如何在找到图片,并且将图片展示到img标签中,通过这种方式是可以实现的
@ResponseBody
@RequestMapping(value = "/test.action")
public void base64ToFile(String base64, String fileName,
HttpServletResponse response) {
File file = null;
InputStream fis = null;
OutputStream fos = null;
try {
file = new File("G:/image/2.jpg");//假设了图片的路径
fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// 设置response的header
response.reset();
response.setHeader("Content-Type", "image/jpg");
response.addHeader("Content-Length", "" + file.length());
fos = new BufferedOutputStream(response.getOutputStream());
fos.write(buffer);
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
在浏览器中图片展示如下
下载文件
1.这是我第一次接触的方式,在这里使用到的httpheaders和HttpStatus都是springmvc中包含的类,都是一些封装好的枚举类,如果想要更多的了解这些东西可以去网上参考博客
@RequestMapping(value = "/downFile.action")
public ResponseEntity<byte[]> downFile() {
HttpHeaders headers = new HttpHeaders();
InputStream fis = null;
byte[] buffer = null;
try {
String filepath = "G:/image/2.jpg";
File file = new File(filepath);
String filename = file.getName();
headers.setContentDispositionFormData("attachment", filename);
fis = new BufferedInputStream(new FileInputStream(file));
buffer= new byte[fis.available()];
fis.read(buffer);
return new ResponseEntity<byte[]>(buffer,headers,HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity<byte[]>(buffer,headers,HttpStatus.NOT_FOUND);
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
总结
其实在了解这些东西的时候我们对于浏览器所报的异常情况就可以很快的给出解决方案,对于加快网页的开发非常有帮助,学无止境!