flex端:
FileExporter.as
importflash.display.BitmapData;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.navigateToURL;
import flash.utils.ByteArray;
import mx.core.UIComponent;
import mx.graphics.codec.JPEGEncoder;
import mx.managers.BrowserManager;
import mx.managers.IBrowserManager;
import mx.utils.URLUtil;
public class FileExporter
{
public function FileExporter()
{
}
// 1、flex 根据文件内容和文件名称导出为文件
public functionexportFile(content:String,fileName:String):void
{
var headers:Array=new Array(newURLRequestHeader("fileName",encodeURI(fileName)));
this.post("/action/fileExportAction.action",ByteArrayUtil.getByteArray(content),headers);
}
// 2、flex 根据UIComponent和文件名称导出为图片
public functionexportDesignImage(ui:UIComponent,fileName:String):void
{
var bitmapData : BitmapData = newBitmapData(ui.width,ui.height);
bitmapData.draw(ui); ? ?
var jpgByteArray : ByteArray = newJPEGEncoder(90).encode(bitmapData);
var headers:Array=new Array(newURLRequestHeader("fileName",jpgByteArray,headers);
}
//3、flex 从指定文件位置下载文件
public functionexportExcel(filePath:String,encodeURI(fileName)));
var url:String=getContext()+"/action/fileDownloadAction.action"+"?filePath="+encodeURIComponent(filePath);
var request:URLRequest= new URLRequest(url);
if(headers!=null)
{
request.requestHeaders=headers;
}
request.data=new ByteArray();;
request.method=URLRequestMethod.POST;
request.contentType="application/octet-stream";
navigateToURL(request,"_self");
}
private functionpost(urlSuffix:String,result:ByteArray,headers:Array):void
{
var url:String=getContext()+urlSuffix;
var request:URLRequest= new URLRequest(url);
if(headers!=null)
{
request.requestHeaders=headers;
}
request.method=URLRequestMethod.POST;
request.data=result;
request.contentType="application/octet-stream";
navigateToURL(request,"_self");
}
/**获取浏览器根路径*/
private function getContext():String
{
var bm:IBrowserManager =BrowserManager.getInstance();
bm.init();
varurlPrefix:String="http://"+URLUtil.getServerNameWithPort(bm.url)+"/";
var suffix:String=bm.url.replace(urlPrefix,"");
varcontext:String=suffix.substring(0,suffix.indexOf("/"));
return urlPrefix+context;
}
}
?
ByteArrayUtil.as
importflash.utils.ByteArray;
public class ByteArrayUtil
{
public function ByteArrayUtil()
{
}
/**
?* 将字符串转换为ByteArray
?*/
public static functiongetByteArray(str:String):ByteArray
{
var b:ByteArray=new ByteArray();
b.writeMultiByte(str,"UTF");//utf-32,unicode-32
return b;
}
/**
* 将ByteArray转换为字符串
*/
public static functiongetString(source:ByteArray):String
{
if(source==null)
{
throw new Error("要转换为字符串的数据源不能为空");
}
returnsource.readMultiByte(source.length,"utf");
}?
}
java端:
FileExportAction.java
package action;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import action.BaseAction;
public class FileExportAction extends BaseAction
{
???????? privatestatic final long serialVersionUID = 2462867204321788656L;
???????? privateString downFileName;
???????? privateInputStream inputStream;
???????? privateFile upload;
???????? privateLong catalogId;
???????? privateString uploadFileName;
???????? publicString exportFile() throws IOException
???????? {
?????????????????? try
?????????????????? {
??????????????????????????? downFileName=this.getRequest().getHeader("fileName");
??????????????????????????? inputStream= new BufferedInputStream(getRequest().getInputStream());
?????????????????? }
?????????????????? catch(Exceptione)
?????????????????? {
??????????????????????????? downFileName="导出文件出错.txt";
??????????????????????????? inputStream=newByteArrayInputStream((""+e.getMessage()).getBytes());
?????????????????? }
?????????????????? returnSUCCESS;
???????? }
????????
???????? publicInputStream getInputStream()
???????? {
?????????????????? returninputStream;
???????? }
???????? publicvoid setInputStream(InputStream inputStream)
???????? {
?????????????????? this.inputStream= inputStream;
???????? }
???????? publicString getDownFileName()
???????? {
?????????????????? returndownFileName;
???????? }
???????? publicvoid setDownFileName(String downFileName)
???????? {
?????????????????? this.downFileName= downFileName;
???????? }
???????? publicFile getUpload() {
?????????????????? returnupload;
???????? }
???????? publicvoid setUpload(File upload) {
?????????????????? this.upload= upload;
???????? }
???????? publicLong getCatalogId() {
?????????????????? returncatalogId;
???????? }
???????? publicvoid setCatalogId(Long catalogId) {
?????????????????? this.catalogId= catalogId;
???????? }
???????? publicString getUploadFileName() {
?????????????????? returnuploadFileName;
???????? }
???????? publicvoid setUploadFileName(String uploadFileName) {
?????????????????? this.uploadFileName= uploadFileName;
???????? }
}
FileDownloadAction.java
package action;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import action.BaseAction;
public class FileDownloadAction extends BaseAction{
???????? privatestatic final long serialVersionUID = 2137442469062749248L;
???????? privateInputStream inputStream;
???????? privateString downFileName;
???????? privateString filePath;
???????? publicString exportFile() throws IOException
???????? {
?????????????????? try
?????????????????? {
??????????????????????????? downFileName= this.getRequest().getHeader("fileName");
??????????????????????????? filePath= newString(this.getRequest().getParameter("filePath").getBytes("ISO-8859-1"),"UTF-8");?
??????????????????????????? inputStream= new FileInputStream(filePath);
?????????????????? }
?????????????????? catch(Exceptione)
?????????????????? {
??????????????????????????? downFileName="Error.txt";
??????????????????????????? inputStream=newByteArrayInputStream((""+e.getMessage()).getBytes());
?????????????????? }
?????????????????? returnSUCCESS;
???????? }
???????? publicvoid setInputStream(InputStream inputStream) {
?????????????????? this.inputStream= inputStream;
???????? }
???????? publicInputStream getInputStream() {
?????????????????? returninputStream;
???????? }
???????? publicvoid setDownFileName(String downFileName) {
?????????????????? this.downFileName= downFileName;
???????? }
???????? publicString getDownFileName() {
?????????????????? returndownFileName;
???????? }
???????? publicString getFilePath() {
?????????????????? returnfilePath;
???????? }
???????? publicvoid setFilePath(String filePath) {
?????????????????? this.filePath= filePath;
???????? }
????????
}
struts.xml配置
???????? <packagename="action" namespace="/action"extends="exceptionInterceptor">
?????????? <actionname="fileExportAction" method="exportFile"
???????????????? class="action.FileExportAction">
???????????????? <resultname="success" type="stream">
????????????????????? <paramname="contentType">application/octet-stream</param>
????????????????????? <paramname="inputName">inputStream</param>
????????????????????? <!--
??????????????????????????? 使用经过转码的文件名作为下载文件名,downloadFileName属性 对应action类中的方法
??????????????????????????? getDownloadFileName()
????????????????????? -->
????????????????????? <paramname="contentDisposition">attachment;filename="${downFileName}"</param>
????????????????????? <paramname="bufferSize">4096</param>
???????????????? </result>
?????????? </action>
?????????? <actionname="fileDownloadAction" method="exportFile"
???????????????? class="action.FileDownloadAction">
???????????????? <resultname="success" type="stream">
????????????????????? <paramname="contentType">application/octet-stream</param>
????????????????????? <paramname="inputName">inputStream</param>
????????????????????? <paramname="contentDisposition">attachment;filename="${downFileName}"</param>
????????????????????? <paramname="bufferSize">4096</param>
???????????????? </result>
?????????? </action>
????? </package>
欢迎纠错!