文件下载servlet
这种方式只适用于本地跑项目,访问文件,并不适用于打包项目下载文件,不过可以通过将资源文件放到服务器上与项目同一层级的地方,然后获取到打包项目的层级,通过拼接字符串的方式访问文件地址,进行下载到本地。
/**
* 下载撒模板的工具方法
*
* @param req 服务器请求对象
* @param res 服务器响应对象
* @param path path是指想要下载的文件的路径
*/
public static void downTemplate(HttpServletRequest req, HttpServletResponse res, String path) {
try {
//获取当前项目层级
// File fileDemo = new File("");
// String path = fileDemo.getCanonicalPath() + pathFile;
//创建文件对象
File file = new File(path);
//设置响应的内容类型
res.setContentType("application/octet-stream;charset=utf-8");
//设置下载框展示的建议保存名称
String name = path.substring(path.lastIndexOf("/") + 1);
//判断浏览器类型
String header = req.getHeader("User-Agent");
String IE = "MSIE";
if (header.contains(IE)) {
name = URLEncoder.encode(name, "utf-8");
} else {
name = new String(name.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
res.setHeader("Content-Disposition", "attachment;fileName=" + name);
//加上设置大小 下载下来的excel文件才不会在打开前提示修复
res.addHeader("Content-Length", String.valueOf(file.length()));
//下载文件
Files.copy(file.toPath(), res.getOutputStream());
} catch (IOException ex) {
ex.printStackTrace();
}
}