web中的许多功能不仅仅依靠后台实现,前台的功能也十分强大,操作使用便捷,今天就看到了一个令人心服口服的案例,所以赶紧记下。下次再遇见,至少可以节省五分钟。
下载功能相信在很多的场景中都需要用到。
看今天我作为后台人员如何实现下载功能,废话不多说,直接上代码:
控制器代码
/**
* 下载批量插入用户信息的模板
* @param response
* @param userId
* @param password
*/
@RequestMapping(value = "/loadxls")
public void loadxls(HttpServletResponse response,HttpServletRequest request, String userId, String password) {
InputStream fis = null;
try {
String filename=request.getSession().getServletContext().getRealPath("/ExcelFile")+"/用户导入模板.xls";
File file = new File(filename);
fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = null;
buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
response.addHeader("Content-Disposition",
"attachment;filename=" + new String(filename.replaceAll(" ", "").getBytes("utf-8"), "iso8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream os = null;
os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
os.write(buffer);
os.flush();
os.close();
} catch (FileNotFoundException e) {
LOGGER.error(e.getMessage(), e);
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
前台利用按钮调用:
//批量新增用户
function loadXls(){
window.location.href = ctx + "/loadxls.do";
}
效果截图:
上面虽然实现了,但是如此繁琐。且看前台如何实现
前台代码:
请选择包含用户信息的excel文件(<a href="${rootPath}/ExcelFile/用户导入模板.xls" style="color: #5ba5fc;">下载导入模板</a>)
效果截图:
最后重要的一点就是一定提前将准备好的用户导入模板放到webapp/webContent下,我这放在webapp下的ExcelFile的文件夹下。