前言
我们在开发一些后台系统时,可能会遇到下载模板excel的功能,用户点击下载模板,即下载一个模板excel到本地,这个功能是怎么实现的呢?下面就告诉你
实现
先放一个模板excel到static或者templates文件夹下
下面就是实现的代码
public void downTemplateExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
String fileName="模板.xlsx";
FileInputStream inputStream=null;
ServletOutputStream outputStream = null;
//获取文件路径
String filePath = getClass().getResource("/static/" + fileName).getPath();
//设置响应头
response.setContentType("");
response.setCharacterEncoding("UTF-8");
//获得浏览器代理信息
final String userAgent = request.getHeader("USER-AGENT");
//判断浏览器代理并分别设置响应给浏览器的编码格式
String finalFileName = null;
if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent,"Trident")){
//IE浏览器
finalFileName = URLEncoder.encode(fileName,"UTF8");
System.out.println("IE浏览器");
}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
finalFileName = new String(fileName.getBytes(), "ISO8859-1");
}else{
finalFileName = URLEncoder.encode(fileName,"UTF8");//其他浏览器
}
filePath = URLDecoder.decode(filePath, "UTF-8");
//设置HTTP响应头
response.setHeader("Content-Disposition", "attachment;fileName=" + finalFileName);
try {
// 获取输入流
inputStream = new FileInputStream(filePath);
// 获取输出流
outputStream=response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while ((len = inputStream.read(buffer)) >0) {
// 将文件写到输出流
outputStream.write(buffer,0,len);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (outputStream!=null){
outputStream.flush();
outputStream.close();
}
if (inputStream!=null){
inputStream.close();
}
}
}