项目需求:在列表页面上提供文件下载链接
项目实现:
1.准备excel文件,将英文命名的excel文件放入 src/main/resources 目录下
2.Java实现
3.注意
文件的存放路径
在本地测试及测试环境提测
因为文件放在 src/main/resources 所以此种方式能够获取到文件
但发布到正式环境时,运维说文件不能放在此目录下,src 下只能防止工程的配置文件
所以只能放置在某个其他目录下,对应的下载地址则变为linux 服务上的路径地址
文件的获取方式也不能使用 getResource
项目实现:
1.准备excel文件,将英文命名的excel文件放入 src/main/resources 目录下
2.Java实现
public void downModel(){
logger.info("loanUserOpenAccountBatchModel start");
JSONObject jsonObject = new JSONObject();
jsonObject.put("function", "downModel");
writeJSONObject(jsonObject);
}
public HttpServletResponse downLoanUserOpenAccountModel(){
HttpServletResponse response = ServletActionContext.getResponse();
String path = "";
try {
// /excelModel/loan_user_open_account_batch.xlsx 本地测试地址
File textf = new File("/data/j2ee/jr/excelModel", "loan_user_open_account_batch.xlsx");
// path = ServletActionContext.getServletContext().getResource("/data/j2ee/jr/excelModel").getPath();
path = textf.getPath();
logger.info("downLoanUserOpenAccountModel path:"+path);
} catch (Exception e) {
logger.error("downLoanUserOpenAccountModel error"+e.getMessage(),e);
}
logger.info("Excel 模板下载 ,path:"+path);
try {
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1);
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
//设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
response.addHeader("Content-Disposition", "attachment;filename=" + new String("借款人批量开户模板".getBytes("gb2312"), "ISO8859-1" )+"."+ext.toLowerCase());
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
logger.info("EXCEL 模板下载 成功");
} catch (IOException ex) {
ex.printStackTrace();
logger.error("EXCEL 模板下载 异常");
return null ;
}
return response;
}
3.注意
文件的存放路径
在本地测试及测试环境提测
try {
path = ServletActionContext.getServletContext().getResource("/excelModel/loan_user_open_account_batch.xlsx").getPath();
} catch (MalformedURLException e) {
e.printStackTrace();
}
因为文件放在 src/main/resources 所以此种方式能够获取到文件
但发布到正式环境时,运维说文件不能放在此目录下,src 下只能防止工程的配置文件
所以只能放置在某个其他目录下,对应的下载地址则变为linux 服务上的路径地址
文件的获取方式也不能使用 getResource