从WebApp里面下载Excel文件,文件路径:
- 1.Controller层代码:
/**
* 设备管理——导入模板下载
*
* @param requestType 下载标记
* @return
*/
@RequestMapping(value = "/downLoadImportTemplate")
@ResponseBody
public ResponseResult downLoadImportTemplate(HttpServletRequest request,HttpServletResponse response, String requestType ) {
ResponseResult result = new ResponseResult();
try {
if (StringUtils.isBlank(requestType)) {
//获取文件路径
String filepath = request.getServletContext().getRealPath("/downTemplate/downLoadImportTemplate.xlsx");
//下载后的文件名
String filename ="设备编号批量导入模板";
ExportUtils.downLoadTemplateFromServer(filepath, response, filename);//下载
}
} catch (Exception e) {
result.setResult(ResponseEnum.EXCEPTION);
logger.error("设备编号批量导入模板下载 异常 ", e);
}
return result;
}
- 2.service层代码
/**
* 通过文件流的方式从服务器上下载文件模板
*
* @param filepath 文件模板的路径
* @param filename 下载后的文件名
*/
public static void downLoadTemplateFromServer(String filepath, HttpServletResponse response, String filename) throws Exception{
byte[] content = FileUtils.readFileToByteArray(new File(filepath));
response.setCharacterEncoding("gbk");
String header = "attachment;filename=" + new String((filename).getBytes("UTF-8"), "ISO-8859-1");
if(filepath.endsWith(".xlsx")){
response.setHeader("Content-Disposition", header + ".xlsx");
WebUtil.writeToResponse(response, content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=gbk");
}else{
response.setHeader("Content-Disposition", header + ".xls");
WebUtil.writeToResponse(response, content, "application/vnd.ms-excel;charset=gbk");
}
}
- 3.工具类WebUtil中,将流写进response
/**
* 将data写入http响应中
*
* @param response
* @param data
* @param mimeType
*/
public static void writeToResponse(HttpServletResponse response, byte[] data, String mimeType) {
response.setContentType(mimeType);
ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
outputStream.write(data);
outputStream.flush();
} catch (IOException e) {
logger.error("writeJsonToResponse error!", e);
throw new RuntimeException(e);
} finally {
IOUtils.closeQuietly(outputStream);
}
}