使用若依框架的springboot项目,接上一篇文件上传后做了下载功能;
1. 前端方法
下面展示一些 下载按钮传id
。
actions.push('<a class="btn btn-success btn-xs" onclick="appendixDownLoad(\'' + row.id + '\')"><i class="fa fa-edit"></i>下载</a> ');
访问接口方法:
//文件下载
function appendixDownLoad(id) {
console.log(id)
const url = prefix + "/appendixDownLoad/" + id;
window.open(url);
}
2. 后端方法
/**
* 下载【附件】
* @param id
* @param response
* @throws UnsupportedEncodingException
*/
@GetMapping("/appendixDownLoad/{id}")
@ResponseBody
public void appendixDownLoad(@PathVariable("id") String id, HttpServletResponse response) throws UnsupportedEncodingException {
System.out.println("资源类下载附件,附件ID是:"+id);
TargetAppendix targetAppendix = targetAppendixService.selectTargetAppendixById(id);
//xxx.png
String appendixName = targetAppendix.getAppendixName();
//文件绝对路径
String filePath = targetAppendix.getAppendixUrl();
FileDownloadUtil.downloadFile(response, appendixName, filePath);
}
/*文件下载*/
public static void downloadFile(HttpServletResponse response, String fileName, String path){
if (fileName != null) {
//设置文件路径
File file = new File(path);
if (file.exists()) {
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}