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){} } }
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){} } }