`

服务器文件下载

阅读更多
项目需求:在列表页面上提供文件下载链接

项目实现:

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics