`
zyjwy02
  • 浏览: 141148 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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) 时,都会更新进度条。同样,当完成上载时,进度条进行更新以通知用户文件已上载成功。然后,禁用"取消"按钮,直到用户开始新的文件传输。

分享到:
评论
1 楼 abin103 2009-09-14  
官方原文啊

相关推荐

    Flex上传文件与下载

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

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

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

    flex文件上传下载

    - **DownloadStatusEvent**:Flex提供了`DownloadStatusEvent`事件,用于处理文件下载过程。 - **FileReference.save()**:使用`FileReference`的`save()`方法,指定文件名和保存路径,开始下载。同时,可以监听`...

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

    3. **文件下载**:为了实现文件下载,后端需要提供一个URL,前端可以通过HTTP GET请求获取文件。可以使用`HttpServletResponse`的`setHeader()`方法设置Content-Disposition和Content-Type头,然后通过`...

    Flex文件上传文件代码

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

    Flex附件上传下载

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

    Flex+Java 文件上传

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

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

    文件下载在Flex中的实现与上传类似,但使用了不同的方法。主要步骤如下: 1. **创建FileReference对象**:在接收到下载请求时,创建一个FileReference对象,用于保存下载的文件。 2. **开始下载**:调用...

    flex文件上传下载组件

    4. 文件下载:下载过程相对简单,Flex客户端向服务器发送一个HTTP GET请求,指定要下载的文件路径。Java Servlet根据路径找到文件,将其内容封装在HTTP响应中返回给Flex。Flex接收到响应后,将文件数据写入到用户的...

    flex+java文件上传

    Flex和Java文件上传技术是Web应用中常见的功能,主要用于用户在网页端上传本地文件到服务器。Flex是一款由Adobe公司开发的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,RIA)。它基于...

    Flex文件上传下载

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

    flex实现多文件上传

    在Flex中,我们可以使用`FileReference`类来处理文件选择和上传。`FileReference`允许用户从本地文件系统中选择一个或多个文件。在用户选择文件后,我们可以监听`select`事件来获取选中的文件列表。 ```...

    flex 文件上传下载完整代码(修正版)

    在项目开发过程中,经常会遇到文件上传下载的...但在flex中由于安全沙箱的原因flex程序不能直接访问本地文件,但是flex SDK中提供了FileReference和FileReferenceList两个类,可以通过这两个类来实现文件的上传下载。

    Flex和Servlet结合上传文件

    首先,我们要理解“Flex作为上传文件界面”。Flex使用ActionScript编程语言,基于MXML进行UI布局,可以创建动态、响应式的Web应用程序。在文件上传场景中,Flex可以设计一个包含文件选择按钮和进度条的界面,用户...

    Flex多文件上传+md5验证文件是否上传

    在提供的压缩包文件中,"说明.txt"很可能包含了实现这一功能的详细步骤和注意事项,"Flex源码"是实现多文件上传和MD5验证的Flex代码示例,而"ASP.NET上传接口"可能是服务器端处理文件上传和MD5验证的C#代码。...

    asp.net+flex批量上传文件

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

    flex3 java 文件上传源码

    2. **FileReference对象**:在Flex中,FileReference对象允许用户选择本地文件,并提供了读取文件内容、显示对话框选择文件以及上传文件到服务器的方法。 3. **事件监听**:FileReference对象支持多个事件,如...

    Flex文件上传的组件

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

    Flex 上传多个文件

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

Global site tag (gtag.js) - Google Analytics