Flex 导出文件通用处理

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:639579773; mso-list-type:hybrid; mso-list-template-ids:1566471860 -1081732898 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-text:%1、; mso-level-tab-stop:39.0pt; mso-level-number-position:left; margin-left:39.0pt; text-indent:-18.0pt;} @list l1 {mso-list-id:1687050570; mso-list-type:hybrid; mso-list-template-ids:790016134 667462054 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-text:%1); mso-level-tab-stop:0cm; mso-level-number-position:left; margin-left:0cm; text-indent:21.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

本文所指 Flex 是指 flex web 应用。导出文件在 web 应用中是一个基本功能最常见的恐怕就是将表格数据导出成 excel 了。那么除了 excel 还有专用的表单数据等其它文件格式,本文介绍 flex 导出文件的通用处理方法。

<!-- [if !supportLists]-->1、 <!-- [endif]-->约定

<!-- [if !supportLists]-->1) <!-- [endif]-->flexjava 通讯使用 blazeds

<!-- [if !supportLists]-->2) <!-- [endif]-->使用 java servlet 进行文件流输出;

<!-- [if !supportLists]-->3) <!-- [endif]-->Java 端有一方法 String generateFile( ), 该方法会自动先调用 generateStream 方法得到文件流,然后根据文件流生成文件,并返回文件名称;

<!-- [if !supportLists]-->4) <!-- [endif]-->Java 端有一方法 protected OutputStream generateStream() throws Exception ,开发人员需重写该方法用以导出文件的文件流生成;

<!-- [if !supportLists]-->5) <!-- [endif]-->java 端有一个文件下载的 servlet/servlet/downloadServlet ,需参数 fileNamedelete ,分别表示文件名称和下载后是否在服务器删除副本。

<!-- [if !supportLists]-->2、 <!-- [endif]-->如何实现?

Flex 导出文件通用方法很简单,需做 2 件事情。

第一: flex 发送生成文件指令

调用 java 端方法生成文件,此处需要开发人员做的事情为根据实际情况实现自己的 outputstream 生成方法,产生出 outputstream 方法之后,调用 generateFile 方法,产生出文件并将文件名返回到 flex 前端。

定义一个 remoteobject ,设置其 destinationendpoint 等属性,添加 remoteobjectresult 事件处理。

调用 remoteobject. generateFile() 方法,在其 result 事件中获取文件名称 fileName

第二: flex 发送文件下载指令

Flex 客户端在 remoteobjectresult 事件中发送文件下载指令,进行文件下载、临时文件删除处理。

利用 URLRequestnavigateToURL 进行文件下载,设置 URLRequesturljava 文件下载的 servlet ,并跟上参数 fileNamedeletedelete=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","attachment; 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){}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值