- 浏览: 11261 次
最新评论
在flex中,和传统的JSP一样,有的时候也需要实现文件上传和下载的功能,但是在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()
代码如下:
2、JAVA端
接受Flex端的请求,在JAVA端利用apache的fileupload类库实现上传功能。代码如下:
还要修正web.xml,添加如下内容
二、文件的下载
调用的方法:private function downLoadFiles(urlAdd:String):void
参数urlAdd就是用户的ip地址,如果使用本地的localhost就会产生安全沙箱问题,因此让用户自己输入自己的ip地址。这样就避免了安全沙箱 的问题。如果是本机启动服务,访问地址,需要输入IP,不能用localhost来代替本机的IP地址,否则,还是会出现安全沙箱问题。
FileReference.download() 方法提示用户提供文件的保存位置并开始从远程 URL 进行下载。直接加载请求路径下载,不需要后台的支持。
代码如下:
由于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()
代码如下:
/** *//** * 执行上传操作 * */ private function upLoadFiles():void { try { selectFileList.browse(new Array(imageFilter, textFilter)); selectFileList.addEventListener(Event.SELECT, selectHandler1); } catch (error:Error) { Alert.show("文件选择出现错误,请选择正确的文件"); } } /** *//** * 如果文件被选中,则执行该方法 * */ function selectHandler1(event:Event):void { var request:URLRequest = new URLRequest("FileUploadServlet"); var upLoadFile:FileReference; var upLoadFileList:FileReferenceList = FileReferenceList(event.target); var selectedFileArray:Array = upLoadFileList.fileList; login =(testPress)(PopUpManager.createPopUp( this, testPress , true)); for (var i:uint = 0; i < selectedFileArray.length; i++) { upLoadFile = FileReference(selectedFileArray[i]); upLoadFile.addEventListener(Event.COMPLETE, UpLoadcompleteHandler); upLoadFile.addEventListener(ProgressEvent.PROGRESS, progressHandler); try { upLoadFile.upload(request); } catch (error:Error) { Alert.show(error.message.toString()); } } } function UpLoadcompleteHandler(event:Event):void { var upLoadFiles:FileReference = FileReference(event.target); var fileNames = upLoadFiles.name; //Alert.show(‘文件’+fileNames+’上传成功’) login.myLabels.text = ‘文件’+fileNames+’上传成功’; } private function progressHandler(e:ProgressEvent):void { var proc: uint = e.bytesLoaded / e.bytesTotal * 100; login.bar.setProgress(proc, 100); login.bar.label= "当前进度: " + " " + proc + "%"; } testPress.mxml <?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="528" height="236"> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; public function clickMe():void { PopUpManager.removePopUp(this); } ]]> </mx:Script> <mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A" minimum="0" visible="true" maximum="100" label="当前进度: 0%" direction="right" mode="manual" width="200" x="154" y="84"/> <mx:Button x="221" y="135" label="关闭" click = "clickMe();"/> <mx:Label x="173" y="27" id="myLabels" width="157"/> </mx:TitleWindow>
2、JAVA端
接受Flex端的请求,在JAVA端利用apache的fileupload类库实现上传功能。代码如下:
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { // private String uploadPath = "D:\\upload\\"; private String path = "file_path.properties"; private String skStr = ""; private String uploadPath = ""; private int maxPostSize = 1000 * 1024 * 1024; public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String filePathaa = this.getServletConfig().getServletContext().getRealPath("/"); Properties p = loadProperties(path); uploadPath = p.getProperty("filepath"); res.setContentType("text/html;charset=UTF-8"); req.setCharacterEncoding("UTF-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024*20); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxPostSize); try { List fileItems = upload.parseRequest(req); Iterator iter = fileItems.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { String name = item.getName(); try { File skFile = new File(uploadPath + name); if (skFile.exists()) { skFile.delete(); item.write(new File(uploadPath + name)); } else { item.write(new File(uploadPath + name)); } } catch (Exception e) { e.printStackTrace(); } } } } catch (FileUploadException e) { e.printStackTrace(); } } public Properties loadProperties(String path) throws IOException { InputStream in = this.getClass().getResourceAsStream(path); // Properties p = new Properties(); p.load(in); in.close(); return p; }
还要修正web.xml,添加如下内容
<!– For file uploaded –> <servlet> <servlet-name>FileUploadServlet</servlet-name> <servlet-class>FileUploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FileUploadServlet</servlet-name> <url-pattern>/FileUploadServlet</url-pattern> </servlet-mapping>
二、文件的下载
调用的方法:private function downLoadFiles(urlAdd:String):void
参数urlAdd就是用户的ip地址,如果使用本地的localhost就会产生安全沙箱问题,因此让用户自己输入自己的ip地址。这样就避免了安全沙箱 的问题。如果是本机启动服务,访问地址,需要输入IP,不能用localhost来代替本机的IP地址,否则,还是会出现安全沙箱问题。
FileReference.download() 方法提示用户提供文件的保存位置并开始从远程 URL 进行下载。直接加载请求路径下载,不需要后台的支持。
代码如下:
import com.systex.flex.util.testPress; import flash.net.FileReferenceList; import mx.controls.Alert; import mx.managers.PopUpManager; var imageFilter:FileFilter = new FileFilter("Image Files (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png"); var textFilter:FileFilter = new FileFilter("Text Files (*.txt, *.rtf, *.zip)", "*.txt; *.rtf; *.zip"); var selectFileList:FileReferenceList = new FileReferenceList(); var selectedFileArray:Array = new Array(); var login:testPress = new testPress(); var downloadURL:URLRequest; var DownLoadfile:FileReference; //这是要主要的地方 //http://XX.XX.XX.XX:8080/upload/main.zip private function downLoadFiles(urlAdd:String):void { downloadURL = new URLRequest(urlAdd); DownLoadfile = new FileReference(); configureListeners(DownLoadfile); DownLoadfile.download(downloadURL); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, completeHandler); } private function completeHandler(event:Event):void { mx.controls.Alert.show("文件下载成功"); } 这里的是上面上传代码的上部分 附上测试的MXML <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" > <mx:Script source="UpDownLoadFiles.as"/> <mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15"> <mx:VBox width="100%" horizontalAlign="center"> <mx:TextInput id="mytextInput"/> <mx:Button label="文件下载" click="downLoadFiles(‘http://’+mytextInput.text+’:8080/downLoading/2MSN.rar’);"/> <mx:Button label="上传文件" click="upLoadFiles();"/> </mx:VBox> </mx:Canvas> </mx:Application>
发表评论
-
Flex 实现分秒的时间组件
2013-01-18 16:34 1066实现代码 <?xml version="1. ... -
Flex4之皮肤定制【Skin类和Skin类】
2013-01-09 12:58 1071第一、关于spark.skin.SparkSkin类的 ... -
学习Flex元数据标签
2012-12-19 14:51 852Flex 元数据标签 1、[ArrayElementType] ... -
Metadata标签 一 概述
2012-12-19 14:42 806MXML和ActionScript文件插入 ... -
flex的remoteobject方式调用java的方法
2012-12-10 11:42 1777今天摸索了一下Flex3中使用RemoteObject和Jav ... -
Flex menubar
2012-12-03 15:59 1196<?xml version="1.0" ...
相关推荐
在Flex上传文件的场景中,我们需要创建一个自定义的HttpHandler,处理POST请求,并接收从Flex客户端传来的文件数据。接收到文件后,可以将其保存到服务器的指定位置。 下载部分则相对简单,通常由Flex客户端发起...
### Flex与Servlet结合实现文件上传及下载功能 在Flex与Servlet技术结合的背景下,本文将详细介绍如何通过这两种技术实现文件的上传与下载功能。通过分析提供的代码片段,我们可以看到一个典型的Flex应用程序界面...
Flex文件上传下载是一种在Web应用中实现文件交互的技术,它主要使用Adobe Flex框架来构建富互联网应用程序(RIA)。Flex提供了一种强大的方式来创建交互式的、图形化的用户界面,其中包括处理文件上传和下载功能。在...
在本文中,我们将深入探讨基于Flex的文件上传和下载功能,以及如何利用FileReference类来实现这一过程。Flex是Adobe Flash Platform的一部分,它提供了一种强大的方式来构建富互联网应用程序(RIA)。在Flex中,我们...
在Flex中实现多文件上传,通常涉及到ActionScript编程、组件使用以及与服务器端的交互。下面将详细介绍如何使用Flex来实现这个功能。 一、Flex中的文件选择组件 在Flex中,我们可以使用`FileReference`类来处理文件...
以下是实现下载的步骤: 1. **创建FileReference**:创建FileReference对象,用于存储将要下载的文件。 2. **开始下载**:调用`download()`方法,传入服务器上文件的URL和可选的默认文件名,启动下载过程。 3. **...
Flex上传文件夹插件是一种基于Adobe Flex技术的组件,它扩展了Flex应用程序的功能,使得用户能够轻松地上传整个文件夹,而不仅仅是个别文件。在传统的Web应用中,上传文件通常局限于单个文件的选择,而Flex上传...
标题“FLEX上传下载的FLEX项目源码”暗示了这是一个包含实现文件上传和下载功能的FLEX项目源代码。FLEX中的上传下载功能是通过与服务器进行HTTP通信来实现的,通常涉及到XMLHttpRequest对象或者使用Flash Player的...
本篇文章将详细讲解如何实现"flex文件上传下载,在线以pdf形式浏览文件"这一功能。 首先,让我们了解一下“flex”在这里的含义。Flex通常指的是Adobe Flex,一个用于构建富互联网应用(RIA)的开源框架。它基于...
Flex上传下载功能在企业应用中十分常见,尤其是在处理大量数据交互时。Flex作为一个富客户端的开发框架,提供了强大的用户界面创建能力,同时支持与服务器之间的数据传输。在本主题中,我们将深入探讨如何使用Flex...
【SSH框架下的文件上传下载实现】 在J2EE开发中,文件上传下载是一个常见的功能,传统的解决方案如SmartUpload和Apache的FileUpload等虽然成熟,但在Struts+Spring+Hibernate(SSH)这一流行的Java企业级应用框架下...
在本话题中,我们将详细探讨如何使用Flex来实现FTP文件上传功能,这是一个在Web应用中常见的需求,特别是对于那些需要用户上传文件至服务器的应用。 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输...
本文将深入探讨“flash上传文件,flex上传,无刷新上传,php上传”这一主题,并结合提供的源码文件,分析实现这些功能的关键技术和步骤。 首先,让我们了解一下“Flash上传文件”。在早期的Web开发中,Flash由于其强大...
如果你对Flex上传控件的实现或自定义有疑问,可以通过邮件harry95@163.com联系作者获取更多帮助。记住,理解和掌握这个控件的内部工作原理,将有助于你在项目中更有效地集成和优化文件上传功能。
通过这种方式,Flex和.NET可以实现无缝集成,提供用户友好的文件上传和下载功能。这不仅适用于附件,还可以扩展到其他需要大量数据交换的场景,如图像、视频等多媒体内容。 总之,Flex与WebService结合使用,能够...
本教程将重点讨论如何使用ASP.NET与Adobe Flex技术实现批量文件上传的功能。这两种技术的结合为开发人员提供了跨平台的灵活性,同时保证了前端的交互性和后端的强大处理能力。 首先,ASP.NET是微软公司推出的一种...
[上传下载]Asp.net + Flex实现网络硬盘_flex_up.zip源码ASP.NET网站源码打包下载[上传下载]Asp.net + Flex实现网络硬盘_flex_up.zip源码ASP.NET网站源码打包下载[上传下载]Asp.net + Flex实现网络硬盘_flex_up.zip...
本文将详细讲解如何使用Adobe Flex实现一个具有图片上传和预览功能的应用。 首先,Flex是一种开源的开发框架,基于ActionScript 3.0,用于构建富互联网应用程序(RIA)。在Flex中,我们可以利用Flash Player或Adobe...
Flex文件上传下载组件是基于Adobe Flex技术和Java后端开发的一款功能强大的交互式应用程序,它允许用户在Web浏览器中实现文件的便捷上传与下载。这款组件通常由前端的Flex客户端和后端的Java服务器端两部分组成,...