code: @Override
  	public void render() {
  		if(null == this.file){
  			throw new RenderException("File param is null !");
  		}
  		if(false == file.exists()){
  			throw new RenderException(StrUtil.format("File [{}] not exist !", file));
  		}
  		if(false == file.isFile()){
  			throw new RenderException(StrUtil.format("File [{}] not a file !", file));
  		}
  		long fileLength = file.length();
  		if(fileLength > Integer.MAX_VALUE) {
  			throw new RenderException("File [" + file.getName() + "] is too large, file size: [" + fileLength + "]");
  		}
  		
  		if (StrUtil.isBlank(responseFileName)) {
  			// 如果未指定文件名，使用原文件名
  			responseFileName = file.getName();
  		}
  		responseFileName = HttpUtil.encode(responseFileName, HuluSetting.charset);
  		
  		final HttpServletResponse response = Response.getServletResponse();
  		response.addHeader("Content-disposition", "attachment; filename=" + responseFileName);
  		response.setContentType("application/octet-stream");
  		response.setContentLength((int)fileLength);
  		
  		try {
  			Response.write(new FileInputStream(file));
  		} catch (FileNotFoundException e) {
  			throw new RenderException(StrUtil.format("File [{}] not exist !", file), e);
  		}
  	}
docs: ---------------------------------------------------------- Getters and Setters end