`

flex上传和下载文件

    博客分类:
  • flex
 
阅读更多

FileIO 示例说明了在 Flash Player 中执行文件下载和上载的方法。这些方法包括:

  • 将文件下载到用户的计算机
  • 将文件从用户的计算机上载到服务器
  • 取消正在进行的下载
  • 取消正在进行的上载

要获取该范例的应用程序文件,请访问 www.adobe.com/go/learn_programmingAS3samples_flash_cn。在 Samples/FileIO 文件夹中可以找到 FileIO 应用程序文件。该应用程序包含以下文件:

文件

描述

FileIO.fla

FileIO.mxml

Flash 或 Flex 中的主应用程序文件(分别为 FLA 和 MXML)。

com/example/programmingas3/fileio/FileDownload.as

一个类,包含用于从服务器下载文件的方法。

com/example/programmingas3/fileio/FileUpload.as

一个类,包含用于将文件上载到服务器的方法。

子主题

FileIO 应用程序概述

从远程服务器下载文件

初始化 FileDownload 组件

开始文件下载

监视文件的下载进度

取消文件下载

将文件上载到远程服务器上

初始化 FileUpload 组件

开始文件上载

FileIO 应用程序概述

FileIO 应用程序包含用户界面,使用户可以使用 Flash Player 上载或下载文件。该应用程序首先定义一对自定义组件 FileUpload 和 FileDownload,可以在 com.example.programmingas3.fileio 包中找到这两个组件。每个自定义组件调度其 contentComplete 事件后,将调用该组件的 init() 方法,此方法传递对 ProgressBar 和 Button 组件实例的引用,从而使用户可以看到文件的上载或下载进度或者取消正在进行的文件传输。

FileIO.mxml 文件中的相关代码如下所示(请注意,在 Flash 版本中,FLA 文件包含放在舞台上的组件,这些组件的名称与此步骤中介绍的 Flex 组件的名称相匹配):

<example:FileUpload id="fileUpload" creationComplete="fileUpload.init(uploadProgress, cancelUpload);" />
<example:FileDownload id="fileDownload" creationComplete="fileDownload.init(downloadProgress, cancelDownload);" />

下面的代码显示"上载文件"面板,其中包含一个进度条和两个按钮。第一个按钮 startUpload 调用 FileUpload.startUpload() 方法,该方法调用 FileReference.browse() 方法。下面的摘选显示了用于"上载文件"面板的代码:

<mx:Panel title="Upload File" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
    <mx:ProgressBar id="uploadProgress" label="" mode="manual" />
    <mx:ControlBar horizontalAlign="right">
        <mx:Button id="startUpload" label="Upload..." click="fileUpload.startUpload();" />
        <mx:Button id="cancelUpload" label="Cancel" click="fileUpload.cancelUpload();" enabled="false" />
    </mx:ControlBar>
</mx:Panel>

此代码将一个 ProgressBar 组件实例和两个 Button 组件按钮实例放在舞台上。当用户单击"上载"按钮 (startUpload) 时,会启动一个操作系统对话框,允许用户选择要上载到远程服务器的文件。尽管用户开始文件上载时,另一个按钮 cancelUpload 会变为可用,并允许用户随时中断文件传输,但默认情况下禁用该按钮。

用于"下载文件"面板的代码如下:

<mx:Panel title="Download File" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
    <mx:ProgressBar id="downloadProgress" label="" mode="manual" />
    <mx:ControlBar horizontalAlign="right">
        <mx:Button id="startDownload" label="Download..." click="fileDownload.startDownload();" />
        <mx:Button id="cancelDownload" label="Cancel" click="fileDownload.cancelDownload();" enabled="false" />
    </mx:ControlBar>
</mx:Panel>

此代码与文件上载代码非常相似。当用户单击"下载"按钮 (startDownload) 时,会调用 FileDownload.startDownload() 方法,从而开始下载 FileDownload.DOWNLOAD_URL 变量中指定的文件。在文件下载时,进度条进行更新,以显示文件下载百分比。用户可以随时通过单击 cancelDownload 按钮取消下载,这样会立即停止正在进行的文件下载。

从远程服务器下载文件

从远程服务器下载文件由 flash.net.FileReference 类和自定义 com.example.programmingas3.fileio.FileDownload 类处理。当用户单击"下载"按钮时,Flash Player 开始下载 FileDownload 类的 DOWNLOAD_URL 变量中指定的文件。

FileDownload 类从定义 com.example.programmingas3.fileio 包中的 4 个变量开始,如以下代码所示:

    /**
     * 对要下载到用户计算机的文件的 URL 进行硬编码。
     */
    private const DOWNLOAD_URL:String = "http://www.yourdomain.com/file_to_download.zip";

    /**
     * 创建 FileReference 实例以处理文件下载。
     */
    private var fr:FileReference;

    /**
     * 定义对下载 ProgressBar 组件的引用。
     */
    private var pb:ProgressBar;

    /**
     * 定义对"取消"按钮的引用,该按钮将立即停止
     * 当前正在进行的下载。
     */
    private var btn:Button;

第一个变量 DOWNLOAD_URL 包含文件的路径,当用户单击主应用程序文件中的"下载"按钮时,该文件会下载到用户的计算机上。

第二个变量 fr 是 FileReference 对象,该对象在 FileDownload.init() 方法中进行初始化,用于处理远程文件到用户计算机的下载。

最后两个变量 pbbtn 包含对舞台上的 ProgressBar 和 Button 组件实例的引用,它们由 FileDownload.init() 方法进行初始化。

初始化 FileDownload 组件

通过在 FileDownload 类中调用 init() 方法对 FileDownload 组件进行初始化。此方法使用两个参数 pbbtn,它们分别是 ProgressBar 和 Button 组件实例。

用于 init() 方法的代码如下所示:

    /**
     * 设置对组件的引用,并添加 OPEN、
     * PROGRESS 和 COMPLETE 事件的侦听器。
     */
    public function init(pb:ProgressBar, btn:Button):void
    {
        // 设置对进度条和"取消"按钮的引用,
        // 它们是从调用脚本传递的。
        this.pb = pb;
        this.btn = btn;

        fr = new FileReference();
        fr.addEventListener(Event.OPEN, openHandler);
        fr.addEventListener(ProgressEvent.PROGRESS, progressHandler);
        fr.addEventListener(Event.COMPLETE, completeHandler);
    }

开始文件下载

当用户单击舞台上的 Download Button 组件实例时,startDownload() 方法启动文件下载进程。下面的摘选显示了 startDownload() 方法:

    /**
     * 开始下载在 DOWNLOAD_URL 常量中指定的文件。
     */
    public function startDownload():void
    {
        var request:URLRequest = new URLRequest();
        request.url = DOWNLOAD_URL;
        fr.download(request);
    }

首先,startDownload() 方法创建一个新的 URLRequest 对象,并将目标 URL 设置为 DOWNLOAD_URL 变量指定的值。接下来,调用 FileReference.download() 方法,将新创建的 URLRequest 对象作为参数传递。这会导致操作系统在用户计算机上显示一个对话框,提示用户选择一个位置以保存所请求的文档。用户选择了位置后,将调度 open 事件 (Event.OPEN) 并调用 openHandler() 方法。

openHandler() 方法设置 ProgressBar 组件的 label 属性的文本格式,并启用"取消"按钮,允许用户立即停止正在进行的下载。openHandler() 方法如下所示:

    /**
     * 调度 OPEN 事件后,更改进度条的标签
     * 并启用"取消"按钮,以使用户能够中止
     * 下载操作。
     */
    private function openHandler(event:Event):void
    {
        pb.label = "DOWNLOADING %3%%";
        btn.enabled = true;
    }

监视文件的下载进度

当从远程服务器向用户计算机下载文件时,会定期调度 progress 事件 (ProgressEvent.PROGRESS)。每当调度 progress 事件时,会调用 progressHandler() 方法并更新舞台上的 ProgressBar 组件实例。用于 progressHandler() 方法的代码如下所示:

    /**
     * 在下载文件的同时,更新进度栏的状态。
     */
    private function progressHandler(event:ProgressEvent):void
    {
        pb.setProgress(event.bytesLoaded, event.bytesTotal);
    }

进度事件包含两个属性(bytesLoadedbytesTotal),它们用于更新舞台上的 ProgressBar 组件。这样,用户可以了解已完成下载的文件比例以及尚未下载的文件比例。用户可以通过单击进度条下的"取消"按钮随时终止文件传输。

如果文件下载成功,complete 事件 (Event.COMPLETE) 将调用 completeHandler() 方法,该方法通知用户文件已完成下载并禁用"取消"按钮。用于 completeHandler() 方法的代码如下所示:

    /**
     * 在下载完成后,更改一次(也是最后一次)进度栏的标签 
     * 并禁用"取消"按钮,因为下载 
     * 已经完成。
     */
    private function completeHandler(event:Event):void
    {
        pb.label = "DOWNLOAD COMPLETE";
        btn.enabled = false;
    }

取消文件下载

用户可以通过单击舞台上的"取消"按钮随时终止文件传输和停止下载任何更多字节。下面的摘选显示了用于取消下载的代码:

    /**
     * 取消当前文件下载。
     */
    public function cancelDownload():void
    {
        fr.cancel();
        pb.label = "DOWNLOAD CANCELLED";
        btn.enabled = false;
    }

首先,该代码立即停止文件传输以禁止下载其它任何数据。接下来,进度条的 label 属性进行更新,通知用户下载已成功取消。最后,禁用"取消"按钮,从而阻止用户再次尝试下载文件之前再次单击该按钮。

将文件上载到远程服务器上

文件上载进程与文件下载进程非常相似。FileUpload 类声明相同的四个变量,如以下代码所示:

private const UPLOAD_URL:String = "http://www.yourdomain.com/your_upload_script.cfm";
private var fr:FileReference;
private var pb:ProgressBar;
private var btn:Button;

FileDownload.DOWNLOAD_URL 变量不同,UPLOAD_URL 变量包含将从用户计算机上载文件的服务器端脚本的 URL。其余三个变量的作用与 FileDownload 类中的对应变量相同。

初始化 FileUpload 组件

FileUpload 组件包含 init() 方法,此方法从主应用程序调用。此方法使用两个参数 pbbtn,它们是对舞台上的 ProgressBar 和 Button 组件实例的引用。接下来,init() 方法初始化先前在 FileUpload 类中定义的 FileReference 对象。最后,此方法将四个事件侦听器分配给 FileReference 对象。用于 init() 方法的代码如下所示:

public function init(pb:ProgressBar, btn:Button):void
{
    this.pb = pb;
    this.btn = btn;

    fr = new FileReference();
    fr.addEventListener(Event.SELECT, selectHandler);
    fr.addEventListener(Event.OPEN, openHandler);
    fr.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    fr.addEventListener(Event.COMPLETE, completeHandler);
}

开始文件上载

当用户单击舞台上的"上载"按钮时,启动文件上载,此操作将调用 FileUpload.startUpload() 方法。此方法调用 FileReference 类的 browse() 方法,从而导致操作系统显示一个系统对话框,以提示用户选择要上载到远程服务器的文件。下面的摘选显示了用于 startUpload() 方法的代码:

public function startUpload():void
{
    fr.browse();
}

在用户选择要上载的文件后,将调度 select 事件 (Event.SELECT),从而导致调用 selectHandler() 方法。selectHandler() 方法新建一个 URLRequest 对象,并将 URLRequest.url 属性设置为先前在代码中定义的 UPLOAD_URL 常量的值。最后,FileReference 对象将所选文件上载到指定的服务器端脚本。用于 selectHandler() 方法的代码如下所示:

private function selectHandler(event:Event):void
{
    var request:URLRequest = new URLRequest();
    request.url = UPLOAD_URL;
    fr.upload(request);
}

FileUpload 类中的其余代码与 FileDownload 类中定义的代码相同。如果用户想要在任何时间点终止上载,可以单击"取消"按钮,该按钮将在进度条上设置标签并立即停止文件传输。每当调度 progress 事件 (ProgressEvent.PROGRESS) 时,都会更新进度条。同样,当完成上载时,进度条进行更新以通知用户文件已上载成功。然后,禁用"取消"按钮,直到用户开始新的文件传输。

分享到:
评论

相关推荐

    Flex上传文件与下载

    - **Button**:两个按钮,分别用于打开文件选择对话框(选择文件)和上传文件。 - **List**:用于显示已选中的文件列表。 - **Button**:用于触发文件下载操作。 - **ProgressBar**:用于显示文件上传进度。 #### ...

    flex文件上传下载,在线以pdf形式浏览文件

    在IT行业中,文件上传下载和在线浏览功能是许多应用程序和服务的核心组成部分,特别是在文档协作、文件管理系统和云存储服务中。本篇文章将详细讲解如何实现"flex文件上传下载,在线以pdf形式浏览文件"这一功能。 ...

    flex文件上传下载

    在Web开发中,文件上传和下载是常见的需求,例如用户可能需要上传图片、文档或者下载服务器上的资源。下面将详细讨论Flex如何实现这些功能。 1. **Flex文件上传** - **FileReference对象**:在Flex中,`...

    Flex附件上传下载

    在Flex上传文件的场景中,我们需要创建一个自定义的HttpHandler,处理POST请求,并接收从Flex客户端传来的文件数据。接收到文件后,可以将其保存到服务器的指定位置。 下载部分则相对简单,通常由Flex客户端发起...

    flex 文件上传下载完整代码(废弃--代码有错误)

    在本文中,我们将深入探讨基于Flex的文件上传和下载功能,以及如何利用FileReference类来实现这一过程。Flex是Adobe Flash Platform的一部分,它提供了一种强大的方式来构建富互联网应用程序(RIA)。在Flex中,我们...

    flex上传文件夹插件

    在传统的Web应用中,上传文件通常局限于单个文件的选择,而Flex上传文件夹插件通过Flash Player的支持,打破了这一限制,提升了用户体验。 首先,Flex是一种开源的、基于ActionScript 3的编程框架,用于构建富...

    flex在web端上传和下载文件前后台代码

    本示例中,我们将探讨如何使用Flex作为前端,Java作为后端,实现文件的上传和下载功能。Flex是一种基于Adobe Flash Player的富互联网应用(RIA)开发框架,而Java则提供强大的服务器端处理能力。 ### 前端:Flex 1...

    flex文件上传下载组件

    Flex文件上传下载组件是基于Adobe Flex技术和Java后端开发的一款功能强大的交互式应用程序,它允许用户在Web浏览器中实现文件的便捷上传与下载。这款组件通常由前端的Flex客户端和后端的Java服务器端两部分组成,...

    flash上传文件,flex上传,无刷新上传,php上传,含源码

    本文将深入探讨“flash上传文件,flex上传,无刷新上传,php上传”这一主题,并结合提供的源码文件,分析实现这些功能的关键技术和步骤。 首先,让我们了解一下“Flash上传文件”。在早期的Web开发中,Flash由于其强大...

    Flex文件上传文件代码

    Flex 文件上传的文件代码 交你一步一步的完成上传功能

    asp.net+flex批量上传文件

    这个类是ASP.NET MVC或Web Forms中用于处理HTTP POST请求中上传文件的对象。你可以通过表单的`&lt;input type="file" /&gt;`控件来选择多个文件,然后在服务器端通过`Request.Files`集合访问这些文件。对于批量上传,需要...

    Flex文件上传下载

    Flex文件上传下载是一种基于Adobe Flex技术的Web应用功能,它结合了Java后端服务来实现文件的上传和下载。在Flex前端,用户可以方便地通过图形界面选择文件,并通过Ajax方式与Java服务器进行异步通信,实现数据的...

    Flex+Java 文件上传

    在开始之前,我们需要下载Apache Commons项目中的两个库文件,它们是`common-fileupload-1.1.1.jar`和`common-io-1.2.jar`。这两个库文件提供了Java Servlet进行文件上传所需的功能。将它们添加到Java项目的类路径...

    Flex+WebService附件上传下载

    通过这种方式,Flex和.NET可以实现无缝集成,提供用户友好的文件上传和下载功能。这不仅适用于附件,还可以扩展到其他需要大量数据交换的场景,如图像、视频等多媒体内容。 总之,Flex与WebService结合使用,能够...

    flex 上传下载源码

    3. **上传文件**:调用`upload()`方法,传入HTTP服务端的URL和POST请求的参数,开始文件上传。 对于下载功能,Flex同样利用了FileReference类,但使用的是不同的方法。以下是实现下载的步骤: 1. **创建...

    Flex文件上传的组件

    Flex文件上传组件是一种基于Adobe Flex技术的用户界面组件,它允许用户在Web应用程序中选择并上传文件。在Flex中,这种组件通常会显示一个文件选择对话框,让用户选择要上传的文件,并且会提供一个进度条来显示上传...

    Flex 上传多个文件

    当用户选择多个文件后,可以通过循环遍历这些对象来逐个上传文件。 以下是一个基本的多文件上传流程: 1. **创建用户界面**:在Flex应用中,需要创建一个允许用户选择文件的界面。这通常是一个FileUpload组件,...

    Flex 上传文件控件 (带java服务端)

    本项目提供了一个完整的Flex文件上传控件,且集成了Java服务端处理,允许用户上传文件到服务器,并能进行多文件或单文件选择,以及设置上传文件大小限制,同时展示上传进度条,为用户提供友好的交互体验。...

    Flex文件上传(某GIS系统,我负责的文件上传部分)

    这个类提供了选择本地文件、读取文件内容以及上传文件到服务器的方法。用户通过点击按钮触发文件选择对话框,选择后,`FileReference`会处理文件并准备上传。 3. **事件监听**:为了跟踪文件选择和上传过程,我们...

Global site tag (gtag.js) - Google Analytics