首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Flex中的资料上传与下载

2013-03-27 
Flex中的文件上传与下载www.diy567.com累了,去上面休息一下下,QQ空间,美文,非主流,网络日记,搞笑短信,祝福

Flex中的文件上传与下载


www.diy567.com累了,去上面休息一下下,QQ空间,美文,非主流,网络日记,搞笑短信,祝福短信,热门短信,有意思啊

和传统的JSP一样,在flex中,有的时候也需要实现文件上传和下载的功能,但是在flex里文件的上传和下载的实现相对来说比较复杂,如何实现,请看下面。

由于flex是一个比较新的技术,在研究的时候,还是按着JSP的方式去尝试,在开始之初,主要有以下几种思路:

A、利用ftp的方式进行文件的上传和下载,需要利用flex的socket接口。

B、利用webService的方式来进行文件的上传和下载

C、利用flex+sevlet+fileupload组件实现文件的上传和下载

在通过比较后,最后选择了第三种,用Flex+sevlet的方式来完成文件上传和下载的功能,理由如下(与上面的思路相对应):

A、涉及到了流的操作,实现起来比较复杂,出现错误的几率比较高

B、关于flex端的可参考的资料比较少,并且还需要启动webservice服务

C、这个技术比较成熟,从flex2.0开始,在flex端已经可以引用FileReference类了,并且在java端有成熟的组件可以使用,所以最后考虑使用该种方法来处理。

一、文件的上传

1、Flex端
A、使用到的类介绍:
FileReference 类提供了在用户计算机和服务器之间上载和下载文件的方法。 操作系统对话框会提示用户选择要上载的文件或用于下载的位置。它主要能实现一个文件的上传。
FileReferenceList 类提供了让用户选择一个或多个要上载的文件的方法。 FileReferenceList 对象将用户磁盘上的一组本地文件(一个或多个文件)表示为 FileReference 对象的数组。
B、使用 FileReferenceList 类 实现多文件上传:
1) 将该类实例化:var myFileRef = new FileReferenceList();
2) 调用 FileReferenceList.browse() 方法,该方法将打开一个对话框,让用户选择一个或多个要上载的文件:myFileRef.browse();
3) 在成功调用 browse() 方法之后,使用 FileReference 对象数组来填充 FileReferenceList 对象的 fileList 属性。
对 fileList 数组中的每个元素调用 FileReference.upload()

代码如下:

Flex中的资料上传与下载Flex中的资料上传与下载/***//**
Flex中的资料上传与下载*执行上传操作
Flex中的资料上传与下载**/
Flex中的资料上传与下载privatefunctionupLoadFiles():void
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载try
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载selectFileList.browse(newArray(imageFilter,textFilter));
Flex中的资料上传与下载selectFileList.addEventListener(Event.SELECT,selectHandler1);
Flex中的资料上传与下载}
Flex中的资料上传与下载catch(error:Error)
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载Alert.show("文件选择出现错误,请选择正确的文件");
Flex中的资料上传与下载}
Flex中的资料上传与下载}
Flex中的资料上传与下载Flex中的资料上传与下载/***//**
Flex中的资料上传与下载*如果文件被选中,则执行该方法
Flex中的资料上传与下载**/
Flex中的资料上传与下载functionselectHandler1(event:Event):void
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载varrequest:URLRequest=newURLRequest("FileUploadServlet");
Flex中的资料上传与下载varupLoadFile:FileReference;
Flex中的资料上传与下载varupLoadFileList:FileReferenceList=FileReferenceList(event.target);
Flex中的资料上传与下载varselectedFileArray:Array=upLoadFileList.fileList;
Flex中的资料上传与下载login=(testPress)(PopUpManager.createPopUp(this,testPress,true));
Flex中的资料上传与下载for(vari:uint=0;i<selectedFileArray.length;i++)
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载upLoadFile=FileReference(selectedFileArray[i]);
Flex中的资料上传与下载upLoadFile.addEventListener(Event.COMPLETE,UpLoadcompleteHandler);
Flex中的资料上传与下载upLoadFile.addEventListener(ProgressEvent.PROGRESS,progressHandler);
Flex中的资料上传与下载try
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载upLoadFile.upload(request);
Flex中的资料上传与下载}
Flex中的资料上传与下载catch(error:Error)
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载Alert.show(error.message.toString());
Flex中的资料上传与下载}
Flex中的资料上传与下载}
Flex中的资料上传与下载}
Flex中的资料上传与下载functionUpLoadcompleteHandler(event:Event):void
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载varupLoadFiles:FileReference=FileReference(event.target);
Flex中的资料上传与下载varfileNames=upLoadFiles.name;
Flex中的资料上传与下载//Alert.show('文件'+fileNames+'上传成功')
Flex中的资料上传与下载login.myLabels.text='文件'+fileNames+'上传成功';
Flex中的资料上传与下载}
Flex中的资料上传与下载privatefunctionprogressHandler(e:ProgressEvent):void
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载varproc:uint=e.bytesLoaded/e.bytesTotal*100;
Flex中的资料上传与下载login.bar.setProgress(proc,100);
Flex中的资料上传与下载login.bar.label="当前进度:"+""+proc+"%";
Flex中的资料上传与下载}


testPress.mxml

Flex中的资料上传与下载<?xmlversion="1.0"encoding="utf-8"?>
Flex中的资料上传与下载<mx:TitleWindowxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"width="528"height="236">
Flex中的资料上传与下载<mx:Script>
Flex中的资料上传与下载<![CDATA[
Flex中的资料上传与下载importmx.managers.PopUpManager;
Flex中的资料上传与下载publicfunctionclickMe():void{
Flex中的资料上传与下载PopUpManager.removePopUp(this);
Flex中的资料上传与下载}
Flex中的资料上传与下载]]>
Flex中的资料上传与下载</mx:Script>
Flex中的资料上传与下载<mx:ProgressBarid="bar"labelPlacement="bottom"themeColor="#F20D7A"
Flex中的资料上传与下载minimum="0"visible="true"maximum="100"label="当前进度:0%"
Flex中的资料上传与下载direction="right"mode="manual"width="200"x="154"y="84"/>
Flex中的资料上传与下载<mx:Buttonx="221"y="135"label="关闭"click="clickMe();"/>
Flex中的资料上传与下载<mx:Labelx="173"y="27"id="myLabels"width="157"/>
Flex中的资料上传与下载
Flex中的资料上传与下载</mx:TitleWindow>
Flex中的资料上传与下载


2、JAVA端


接受Flex端的请求,在JAVA端利用apache的fileupload类库实现上传功能。代码如下:

?

Flex中的资料上传与下载importjava.io.File;
Flex中的资料上传与下载importjava.io.FileInputStream;
Flex中的资料上传与下载importjava.io.IOException;
Flex中的资料上传与下载importjava.io.InputStream;
Flex中的资料上传与下载importjava.util.Iterator;
Flex中的资料上传与下载importjava.util.List;
Flex中的资料上传与下载importjava.util.Properties;
Flex中的资料上传与下载
Flex中的资料上传与下载importjavax.servlet.ServletContext;
Flex中的资料上传与下载importjavax.servlet.ServletException;
Flex中的资料上传与下载importjavax.servlet.http.HttpServlet;
Flex中的资料上传与下载importjavax.servlet.http.HttpServletRequest;
Flex中的资料上传与下载importjavax.servlet.http.HttpServletResponse;
Flex中的资料上传与下载
Flex中的资料上传与下载importorg.apache.commons.fileupload.FileItem;
Flex中的资料上传与下载importorg.apache.commons.fileupload.FileUploadException;
Flex中的资料上传与下载importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
Flex中的资料上传与下载importorg.apache.commons.fileupload.servlet.ServletFileUpload;
Flex中的资料上传与下载
Flex中的资料上传与下载publicclassFileUploadServletextendsHttpServlet
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载
Flex中的资料上传与下载//privateStringuploadPath="D:\\upload\";
Flex中的资料上传与下载privateStringpath="file_path.properties";
Flex中的资料上传与下载privateStringskStr="";
Flex中的资料上传与下载privateStringuploadPath="";
Flex中的资料上传与下载privateintmaxPostSize=1000*1024*1024;
Flex中的资料上传与下载
Flex中的资料上传与下载publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)throwsServletException,
Flex中的资料上传与下载IOException
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载StringfilePathaa=this.getServletConfig().getServletContext().getRealPath("/");
Flex中的资料上传与下载
Flex中的资料上传与下载Propertiesp=loadProperties(path);
Flex中的资料上传与下载
Flex中的资料上传与下载uploadPath=p.getProperty("filepath");
Flex中的资料上传与下载
Flex中的资料上传与下载res.setContentType("text/html;charset=UTF-8");
Flex中的资料上传与下载req.setCharacterEncoding("UTF-8");
Flex中的资料上传与下载
Flex中的资料上传与下载DiskFileItemFactoryfactory=newDiskFileItemFactory();
Flex中的资料上传与下载factory.setSizeThreshold(1024*20);
Flex中的资料上传与下载
Flex中的资料上传与下载ServletFileUploadupload=newServletFileUpload(factory);
Flex中的资料上传与下载upload.setSizeMax(maxPostSize);
Flex中的资料上传与下载try
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载ListfileItems=upload.parseRequest(req);
Flex中的资料上传与下载Iteratoriter=fileItems.iterator();
Flex中的资料上传与下载while(iter.hasNext())
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载FileItemitem=(FileItem)iter.next();
Flex中的资料上传与下载if(!item.isFormField())
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载Stringname=item.getName();
Flex中的资料上传与下载
Flex中的资料上传与下载try
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载FileskFile=newFile(uploadPath+name);
Flex中的资料上传与下载if(skFile.exists())
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载skFile.delete();
Flex中的资料上传与下载item.write(newFile(uploadPath+name));
Flex中的资料上传与下载
Flex中的资料上传与下载}
Flex中的资料上传与下载else
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载item.write(newFile(uploadPath+name));
Flex中的资料上传与下载}
Flex中的资料上传与下载
Flex中的资料上传与下载}catch(Exceptione)
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载e.printStackTrace();
Flex中的资料上传与下载}
Flex中的资料上传与下载}
Flex中的资料上传与下载}
Flex中的资料上传与下载}catch(FileUploadExceptione)
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载e.printStackTrace();
Flex中的资料上传与下载}
Flex中的资料上传与下载
Flex中的资料上传与下载}
Flex中的资料上传与下载
Flex中的资料上传与下载publicPropertiesloadProperties(Stringpath)throwsIOException
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载
Flex中的资料上传与下载InputStreamin=this.getClass().getResourceAsStream(path);
Flex中的资料上传与下载//
Flex中的资料上传与下载
Flex中的资料上传与下载Propertiesp=newProperties();
Flex中的资料上传与下载
Flex中的资料上传与下载p.load(in);
Flex中的资料上传与下载in.close();
Flex中的资料上传与下载returnp;
Flex中的资料上传与下载}
Flex中的资料上传与下载
Flex中的资料上传与下载}


还要修正web.xml,添加如下内容

?

Flex中的资料上传与下载<!--Forfileuploaded-->
Flex中的资料上传与下载<servlet>
Flex中的资料上传与下载<servlet-name>FileUploadServlet</servlet-name>
Flex中的资料上传与下载<servlet-class>FileUploadServlet</servlet-class>
Flex中的资料上传与下载</servlet>
Flex中的资料上传与下载
Flex中的资料上传与下载<servlet-mapping>
Flex中的资料上传与下载<servlet-name>FileUploadServlet</servlet-name>
Flex中的资料上传与下载<url-pattern>/FileUploadServlet</url-pattern>
Flex中的资料上传与下载</servlet-mapping>


二、文件的下载

调用的方法:private function downLoadFiles(urlAdd:String):void
参数urlAdd就是用户的ip地址,如果使用本地的localhost就会产生安全沙箱问题,因此让用户自己输入自己的ip地址。这样就避免了安全沙箱的问题。如果是本机启动服务,访问地址,需要输入IP,不能用localhost来代替本机的IP地址,否则,还是会出现安全沙箱问题。

FileReference.download() 方法提示用户提供文件的保存位置并开始从远程 URL 进行下载。直接加载请求路径下载,不需要后台的支持。代码如下:

?

Flex中的资料上传与下载importcom.systex.flex.util.testPress;
Flex中的资料上传与下载
Flex中的资料上传与下载importflash.net.FileReferenceList;
Flex中的资料上传与下载
Flex中的资料上传与下载importmx.controls.Alert;
Flex中的资料上传与下载importmx.managers.PopUpManager;
Flex中的资料上传与下载varimageFilter:FileFilter=newFileFilter("ImageFiles(*.jpg,*.jpeg,*.gif,*.png)","*.jpg;*.jpeg;*.gif;*.png");
Flex中的资料上传与下载vartextFilter:FileFilter=newFileFilter("TextFiles(*.txt,*.rtf,*.zip)","*.txt;*.rtf;*.zip");
Flex中的资料上传与下载varselectFileList:FileReferenceList=newFileReferenceList();
Flex中的资料上传与下载varselectedFileArray:Array=newArray();
Flex中的资料上传与下载varlogin:testPress=newtestPress();
Flex中的资料上传与下载vardownloadURL:URLRequest;
Flex中的资料上传与下载varDownLoadfile:FileReference;//这是要主要的地方
Flex中的资料上传与下载//http://XX.XX.XX.XX:8080/upload/main.zip
Flex中的资料上传与下载privatefunctiondownLoadFiles(urlAdd:String):void
Flex中的资料上传与下载Flex中的资料上传与下载Flex中的资料上传与下载{
Flex中的资料上传与下载downloadURL=newURLRequest(urlAdd);
Flex中的资料上传与下载DownLoadfile=newFileReference();
Flex中的资料上传与下载configureListeners(DownLoadfile);
Flex中的资料上传与下载DownLoadfile.download(downloadURL);
Flex中的资料上传与下载}
Flex中的资料上传与下载Flex中的资料上传与下载privatefunctionconfigureListeners(dispatcher:IEventDispatcher):voidFlex中的资料上传与下载{
Flex中的资料上传与下载dispatcher.addEventListener(Event.COMPLETE,completeHandler);
Flex中的资料上传与下载
Flex中的资料上传与下载}
Flex中的资料上传与下载
Flex中的资料上传与下载Flex中的资料上传与下载privatefunctioncompleteHandler(event:Event):voidFlex中的资料上传与下载{
Flex中的资料上传与下载mx.controls.Alert.show("文件下载成功");
Flex中的资料上传与下载}


这里的是上面上传代码的上部分

附上测试的MXML

?

Flex中的资料上传与下载<?xmlversion="1.0"encoding="utf-8"?>
Flex中的资料上传与下载<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"
Flex中的资料上传与下载>
Flex中的资料上传与下载<mx:Scriptsource="UpDownLoadFiles.as"/>
Flex中的资料上传与下载
Flex中的资料上传与下载<mx:Canvaswidth="100%"height="100%"x="10"y="170"fontSize="15">
Flex中的资料上传与下载<mx:VBoxwidth="100%"horizontalAlign="center">
Flex中的资料上传与下载<mx:TextInputid="mytextInput"/>
Flex中的资料上传与下载<mx:Buttonlabel="文件下载"click="downLoadFiles('http://'+mytextInput.text+':8080/downLoading/2MSN.rar');"

热点排行