Flex 导出文件通用处理

Flex 导出文件通用处理
2010年07月10日
   本文所指Flex是指flex web应用。导出文件在web应用中是一个基本功能最常见的恐怕就是将表格数据导出成excel了。那么除了excel还有专用的表单数据等其它文件格式,本文介绍flex导出文件的通用处理方法。
  1、 约定
  1) flex与java通讯使用blazeds;
  2) 使用java servlet进行文件流输出;
  3) Java端有一方法String generateFile(),该方法会自动先调用generateStream方法得到文件流,然后根据文件流生成文件,并返回文件名称;
  4) Java端有一方法protected OutputStream generateStream() throws Exception,开发人员需重写该方法用以导出文件的文件流生成;
  5) java端有一个文件下载的servlet,/servlet/downloadServlet,需参数fileName、delete,分别表示文件名称和下载后是否在服务器删除副本。
  2、 如何实现?
  Flex导出文件通用方法很简单,需做2件事情。
  第一:flex发送生成文件指令
  调用java端方法生成文件,此处需要开发人员做的事情为根据实际情况实现自己的outputstream生成方法,产生出outputstream方法之后,调用generateFile方法,产生出文件并将文件名返回到flex前端。
  定义一个remoteobject,设置其destination、endpoint等属性,添加remoteobject的result事件处理。
  调用remoteobject. generateFile()方法,在其result事件中获取文件名称fileName。
  第二:flex发送文件下载指令
  Flex客户端在remoteobject的result事件中发送文件下载指令,进行文件下载、临时文件删除处理。
  利用URLRequest和navigateToURL进行文件下载,设置URLRequest的url为java 文件下载的servlet,并跟上参数fileName和delete,delete=true时,该文件下载完毕之后,删除服务器上的副本。代码如下:
  var urlRequest:URLRequest = new URLRequest(http://localhost:8080/app/servlet/ downloadServlet?fileName=2323230.xls&delete=true);
  navigateToURL(urlRequest);
  文件下载的servlet核心代码如下:
  public void service (HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
  String fileName = request.getParameter("fileName");
  String filePath = uploadPath+fileName;
  //判断文件是否下载完成之后删除掉
  String deleteed = request.getParameter("delete");
  boolean isDelete = false;
  if(!StringUtil.isEmpty(deleteed) && "true".equalsIgnoreCase(deleteed.trim()))
  isDelete = true;
  //
  File f=null;
  FileInputStream fileIn = null;
  ServletOutputStream outputStream = null;
  try{
  f= new File(filePath);
  if(f.exists()){
  //设置输出格式,保存时的文件默认名称
  response.setContentType("APPLICATION/OCTET-STREAM" );
  response.setHeader("Content-Disposition","attachme nt; filename=\"" + fileName + "\"");
  //
  fileIn = new java.io.FileInputStream(f);
  outputStream = response.getOutputStream();
  int length = fileIn.available();
  byte buffer[]=new byte[length];
  while(length>0){
  fileIn.read(buffer);
  outputStream.write(buffer);
  length=fileIn.available();
  }
  }
  }catch(Exception e){
  e.printStackTrace();
  }finally{
  try{
  if(outputStream!=null)
  outputStream.close();
  }catch(Exception e1){}
  try{
  if(fileIn!=null)
  fileIn.close();
  }catch(Exception e2){}
  try{ if(f!=null && isDelete) f.delete(); }catch(Exception e3){} } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值