`
cwsot
  • 浏览: 14764 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex 导出文件通用处理

 
阅读更多

           本文所指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){}                     }           }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics