JAVA项目文件下载、浏览接口
关于文件上传参照我以前写的这个java项目文件上传文章
如果要接口的写法的话,可以下载这个文件上传下载例子下载地址
本篇文章只说文件下载部分
/**
* 文件下载接口
* @param filePath 文件上传时,返回的相对路径
* @param response
* @param isOnLine 传入true,表示打开,但是打开的是浏览器能识别的文件,比如图片、pdf,word等无法打开
* 传入false,只是下载,如果不传入这个参数默认为false
* @throws Exception
*/
@RequestMapping(value = "/downloadFile",method = RequestMethod.GET)
public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {
File f = new File(realPath+filePath);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
String fileName = f.getName();
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
if (isOnLine) { // 在线打开方式
URL u = new URL("file:///" + realPath+filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition", "inline; filename=" + fileName);
// 文件名应该编码成UTF-8
} else { // 纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
}
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
上边这个接口是一个文件下载的接口,主要有以下几个注意的:
filePath
参数,是在文件上传后,后台应该给你返回一个相对路径,比如/upload/2018-08-03/test.jpg
这样的字符串,接着你在调用这个图片下载接口时,可以直接传回来即可。isOnLine
参数,这个其实为了方便前端对于下载的文件,是预览
,还是下载
,提供了两种选择,请注意,文件预览,必须是可预览的文件,比如doc
、xls
这种是浏览器无法预览的。传入true
,则会打开,传入false
或者不传入这个参数,则只会下载。关于这个
预览
、下载
多说几句,就是对于我们http
请求来说,文件的预览
、下载
,其实对应于请求
中,是一个请求头设置
的问题,当然前提是这个文件可以被浏览器识别打开:
response.setHeader("Content-Disposition", "inline; filename=" + fileName);
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
如果是下载
,那么上边为attachment
。
如果是预览
,那么上边为inline
。
对于前端来说,其实图片的预览不需要关注这个,因为图片对于<img src="">
等那种可以访问路径资源的标签,即使你设置的是下载
,它也能自动打开,但是对于pdf
,貌似必须要在上边接口里,设置成预览
,才能把它打开。