将项目资源目录下的文件下载到当前浏览器,这个文件可能在后端也可能在前端。
一、后端文件
文件在后台服务器。在后端接口把文件赋给响应头,之后浏览器输入网址即可下载
/**
* 选择列表导入方式
* 模板下载
* 导出excel
*/
@GetMapping("/download")
public Result download(HttpServletRequest req, HttpServletResponse response){
//工程中文件
String fileName = "release.xlsx";
String path = System.getProperty("user.dir")+File.separator+"app-release-job"+
File.separator+"src" +File.separator+"main"+File.separator+
"resources"+File.separator+"excel" +File.separator+ fileName;
System.out.print("路径为"+path);
File file = new File(path);
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename="+fileName);
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);
}
bis.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
return ResultGenerator.genCostomFailResult(ResultCode.DELETE_FAIL_ERROR, "导出失败");
} finally {
try {
bis.close();
fis.close();
}catch (Exception e){
return ResultGenerator.genCostomFailResult(ResultCode.DELETE_FAIL_ERROR, "导出失败");
}
}
return ResultGenerator.genSuccessResult("导出成功");
}
xlsx:
@PostMapping(value = "userTemplate")
public void userTemplate(HttpServletResponse response, HttpServletRequest request) {
File file = new File(this.getClass().getClassLoader().getResource("").getPath() + File.separator + "templates" + File.separator + "userTemplate.xlsx");
SXSSFWorkbook sxssfWorkbook = null;
try {
InputStream is = new FileInputStream(file);
sxssfWorkbook = new SXSSFWorkbook( (XSSFWorkbook) WorkbookFactory.create(is) );
// 设置响应头信息。
response.setHeader("Charset", "UTF-8");
response.setHeader("Content-Type", "application/force-download");
response.setHeader("Content-Type", "application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode("用户明细模板" , "utf-8")+ ".xlsx");
response.flushBuffer();
OutputStream outputStream = response.getOutputStream();
sxssfWorkbook.write(outputStream);
// 处理在磁盘上支持此工作簿的临时文件。
sxssfWorkbook.dispose();
} catch (Exception e) {
} finally {
if (null != sxssfWorkbook){
try {
sxssfWorkbook.close();
}catch (Exception e){
}
}
}
}
xls:
@PostMapping(value = "userTemplate")
public void userTemplate(HttpServletResponse response, HttpServletRequest request) {
File file = new File(this.getClass().getClassLoader().getResource("").getPath() + File.separator + "templates" + File.separator + "userTemplate.xls");
HSSFWorkbook sxssfWorkbook = null;
try {
InputStream is = new FileInputStream(file);
sxssfWorkbook = new HSSFWorkbook(is);
// 设置响应头信息。
response.setHeader("Charset", "UTF-8");
response.setHeader("Content-Type", "application/force-download");
response.setHeader("Content-Type", "application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode("用户模板" , "utf-8")+ ".xls");
response.flushBuffer();
OutputStream outputStream = response.getOutputStream();
sxssfWorkbook.write(outputStream);
// 处理在磁盘上支持此工作簿的临时文件。
//sxssfWorkbook.dispose();
} catch (Exception e) {
} finally {
if (null != sxssfWorkbook){
try {
sxssfWorkbook.close();
}catch (Exception e){
}
}
}
}
二、前端文件
文件放在前端资源文件夹。
<div class='template'>
<div class="template-container">
<a href="../../fileUpload/temp/收入模板.xlsx" download="收入模板.xlsx" class='content even'>收入模板下载</a>
<a href="../../fileUpload/temp/退费模板.xlsx" download="退费模板.xlsx" class='content odd'>退费模板下载</a>
</div>
</div>