서버 파일 다운로드
3355 단어 downfile
프로젝트 요구사항: 목록 페이지에서 파일 다운로드 링크 제공
프로젝트 구현:
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를 사용할 수 없습니다.