首先在springBoot的项目路径下添加模板文件
imageVue前端页面访问下载
这里使用的post请求,但无参数传递,特别注意的是要设置返回类型为 arraybuffer。(返回值类型说明请看其他文章)
前端下载文件,需要自定义一个a标签元素,设置它的href值为下载文件的路径则可以下载内容。
//下载模板
downloadExcel() {
this.$http({
url: this.$http.adornUrl('/mgmt/importExportUsers/downloadTemplate'),
method: 'post',
responseType: 'arraybuffer',
data:this.$http.adornData([], false)
}).then((res) => {
let url = window.URL.createObjectURL(new Blob([res.data]))
let a = document.createElement('a')
a.setAttribute("download","userTemplate.xls")
a.href = url
a.click();
})
},
后端下载接口功能
注意:使用resourceLoader.getResource("classpath:data/userTemplate.xls");生成流的形式,打成jar包之后也可以访问到。
使用File file = ResourceUtils.getFile("classpath:templates/b_dfd.txt");生成文件的形式,当打成jar包后访问不到。
/** 下载用户导入模板
* @param file
* @return
* stats:importUsers
*/
@PostMapping("/downloadTemplate")
public void downloadTemp(HttpServletRequest request, HttpServletResponse response){
//定义变量
String downPath = "";
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = null;
byte[] buffer = new byte[1024];
InputStream inputStream = null;
BufferedInputStream bis = null;
OutputStream os = null; //输出流
try {
//获取resource中的文件,并生成流信息
resource = resourceLoader.getResource("classpath:data/userTemplate.xls");
inputStream = resource.getInputStream();
//设置返回文件信息
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName=" + java.net.URLEncoder.encode("userTemplate.xls","UTF-8"));
//将内容使用字节流写入输出流中
os = response.getOutputStream();
bis = new BufferedInputStream(inputStream);
while(bis.read(buffer) != -1){
os.write(buffer);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流信息
try {
if(inputStream !=null ) {
inputStream.close();
}
if(bis != null) {
bis.close();
}
if(os != null) {
os.flush();
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
网友评论