一、html前端页面
<a href="${ctx}/api/sys/maintainance/downloadFile.json?token=${token}&fileName=${fileName}&fileType='1'">
${fileName}</a>
二、java代码
1、controller方法
@RequestMapping(value = "downloadFile", method = RequestMethod.GET)
public void downloadFile(HttpServletRequest request,HttpServletResponse response,
String fileName,String fileType,ShAuthority authority){
try {
maintainanceService.downloadFile(request, response, fileName,fileType);
} catch (Exception e) {
e.printStackTrace();
}
}
2、service方法
/**
* 下载远程文件并保存到本地
* @param remoteFilePath 远程文件路径
* @param localFilePath 本地文件路径
*/
public void downloadFile(HttpServletRequest request,HttpServletResponse response,
String fileName,String fileType){
FileInputStream fis=null;
OutputStream os =null;
try {
TSysMaintenanceB maintenance = findMaintenance();
String filePath=null;
if("1".equals(fileType)){
filePath=maintenance.getDbBackupPath()+File.separator+File.separator+fileName;
}else{
filePath=maintenance.getPatchPath()+File.separator+File.separator+fileName;
}
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
response.setContentType("application/octet-stream");
File file=new File(filePath);
fis = new FileInputStream(file);
os = response.getOutputStream();
byte[] b = new byte[(int) file.length()];
int len = 0;
while((len = fis.read(b))!=-1){
os.write(b, 0, len);
}
os.flush();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}