`

Adobe AIR实现文件下载的断点续传

阅读更多

说到文件下载,就不能不说断点续传,大家可能用过在网页中借助Flash来实现下载进度显示的工具,这个工具只适用于文件体积不是很大的时候,用户可以非常有保障的在一定的时间内下载完成,一旦下载进程中断(网络或其它原因),用户就不得不从头开始下载文件,这对于大文件体积的情况(比如视频),就会很麻烦,用户可能下载了几十MB的时候,突然网络断了,然后只能从头再来,这是非常差的体验。那么能否通过Flash技术,实现断点续传呢?我们先来探讨一下断点续传的原理。

断点续传的原理

现在基本上任何一个下载工具都是支持断点续传的,抛开P2P的成分不谈,我们单说通过HTTP服务器是如何实现断点续传的。关键在于你向HTTP服务器发起文件请求的时候,是否明确的告知,要下载文件的哪个区域,我们都知道HTTP请求是有一个Header的,实际上里面有个属性是定义下载的区域的,这个属性就是Range,它接收的值是一个区间范围,比如:

Range:bytes=0-10000

这样我们就可以按照一定的规则,将一个大文件拆分为若干很小的部分,然后分批次的下载,每个小块下载完成之后,都合并到文件中,这样即时中间中断了下载,我们重新开始下载的时候,也可以通过文件的字节长度来判断下载的起始点,然后重启断点续传的过程,直到最后完成下载过程。

在AS3中,我们是可以为URLRequest添加HTTP头的,就是URLRequestHeader。基于这一点,我们可以说,只需要Flash Player我们其实已经可以实现断点续传了,但问题在于Flash Player是不能自动保存本地文件的,也就是说我们整个断点续传的过程只能在内存里完成,一旦页面刷新,电脑重启,还是要从0开始下载,实际意义不大。

而AIR运行时的出现又为我们保存本地文件提供了可能,所以我们完全可以基于AS3+Flash Player+AIR,制作一个断点续传的工具。

实现过程

 实现的主要几个要点:

  1. 首先对文件发起请求,得到文件的尺寸(字节长度),但并不下载
  2. 然后将文件划分为若干区域,对第一个区域的内容发起请求(通过指定HTTP头的Range)
  3. 第一个区域的内容很快下载完成,使用File保存到本地文件
  4. 移动指针,对第二个区域的内容发起请求,下载完毕后与文件合并
  5. 以此类推,直到下载完成整个文件

主要代码片段:

  1. 先发送一个下载请求,可以得到文件的真实尺寸
    1. var getContentLengthRequest:URLRequest = new URLRequest(videoURL.text);
    2. var getContentLengthLoader:URLLoader = new URLLoader();
    3. getContentLengthLoader.addEventListener(ProgressEvent.PROGRESS ,function(e:ProgressEvent):void {
    4. contentLength = getContentLengthLoader.bytesTotal;//得到文件的真实尺寸
    5. getContentLengthLoader.close();//停止下载
    6. downloadByRange();//按照断点续传的方式下载
    7. });
    8. getContentLengthLoader.load(getContentLengthRequest);
  2. 计算已下载的部分的字节长度
    1. if(file.exists) {//如果文件是存在的,就说明下载过,需要计算从哪个点开始下载
    2. fileStr.open(file, FileMode.READ);
    3. startPoint = fileStr.bytesAvailable;//计算从哪个点开始下载
    4. fileStr.close();//关闭文件流
    5. }
  3. 为请求的Header添加Range
    1. var rangeRequest:URLRequest = new URLRequest(videoURL.text);
    2. var header:URLRequestHeader = new URLRequestHeader("Range", "bytes="+startPoint+"-"+endPoint);//注意这里很关键,我们在请求的Header里包含对Range的描述,这样服务器会返回文件的某个部分
    3. rangeRequest.requestHeaders.push(header);//将头信息添加到请求里
  4. 保存文件
    1. fileStr = new FileStream();
    2. fileStr.open(file, FileMode.UPDATE);
    3. fileStr.position = fileStr.bytesAvailable;//将指针指向文件尾
    4. fileStr.writeBytes(currentData, 0, currentData.length);//在文件中写入新下载的数据
    5. fileStr.close();//关闭文件流

完整代码查看以及下载:

http://www.riameeting.com/examples/end_point_download/

然后测试,你可以看到下载进度,也可以在下载的过程中点击暂停,甚至关闭应用,重新启动,都可以从断点开始下载文件

分享到:
评论

相关推荐

    使用Flash技术通过Adobe AIR实现文件下载的断点续传

    说到文件下载,就不能不说断点续传,大家可能用过在网页中借助Flash来实现下载进度显示的工具,这个工具只适用于文件体积不是很大的时候,用户可以非常有保障的在一定的时间内下载完成,一旦下载进程中断(网络或...

    Http断点续传原理及flex实现技术

    接下来,我们将介绍如何使用AS3(ActionScript 3)、Flash Player和Adobe AIR来实现一个简单的断点续传程序。 ##### 2.1 实现步骤 1. **获取文件尺寸**:首先,程序需要发起一个HTTP请求来获取文件的大小,但此时...

    Flex 利用socket实现断点续传源码

    Flex 利用socket实现断点续传源码,有进度条,在本地代码可以完整运行,Flash Builder 4 ,eclipse ,jdk1.6,java代码偶尔会报线程错误,但是不会影响上传功能

    air 断续续传

    总的来说,"air 断点续传"是一个实用的文件传输解决方案,结合了Adobe AIR的跨平台能力和断点续传的高效特性,为开发者提供了在桌面环境下实现大文件可靠传输的能力。通过研究这样的项目,开发者可以学习到如何在...

    Adobe Air 入门教程

    #### 创建 Adobe AIR 文件 Adobe AIR 技术允许开发者使用 Flash 或 HTML 来创建跨平台的应用程序。首先,你需要在 Adobe Flash CS3 Professional 中创建一个新的 AIR FLA 文件。这一步骤是开发流程的基础,通过创建...

    AS3断点下载工具

    实现了队列下载,可以断点下载,一次下载中断,下次可继续后续的下载,适用于Adobe AIR技术

    基于Flex AIR制作的网页浏览器组件,支持多标签和文件下载.zip

    标题中的“基于Flex AIR制作的网页浏览器组件,支持多标签和文件下载”表明这是一个使用Adobe Integrated Runtime (AIR)和Flex技术开发的Web浏览器组件。Flex是ActionScript 3.0的开发框架,常用于构建富互联网应用...

    Adobe Ajax - 图片处理和上传

    图片上传则涉及到文件选择、预览、上传进度显示、多文件上传、断点续传等功能。在Ajax的帮助下,用户可以选择图片并即时预览,无需等待整个文件上传完成。使用XMLHttpRequest对象可以实现异步文件上传,同时通过...

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

    同时,优化文件传输速度,比如采用分块上传和断点续传,以提高大文件上传的效率。 6. **后端接口**:Flex前端需要与后端服务进行交互,处理文件的存储、检索和权限控制。这通常涉及RESTful API设计,使用HTTP的CRUD...

    flex air案例

    【Flex Air案例】这篇教程是针对对Adobe Integrated Runtime (AIR)有一定了解,想要开始进行AIR开发的新手。本文将引导你逐步创建并发布第一个AIR应用——一个简单的HelloWorld程序。 **1. 准备工作** 首先,你需要...

    AIRFtp类库

    它可能也包含了一些优化策略,如多线程下载、断点续传等。`ftpEvents.as`则可能定义了与FTP操作相关的自定义事件类,如`FtpDownloadCompleteEvent`和`FtpErrorEvent`。 使用这个类库,开发者可以快速集成FTP功能到...

    FLEX实现的一例多文件上传源码

    此外,优化上传速度和用户体验,如使用断点续传和分块上传,也是开发中需考虑的方面。 通过这个FLEX多文件上传的实例,开发者可以学习到如何在客户端和服务器之间有效地传递大量数据,以及如何在前端提供友好的用户...

    as3下载源码

    例如,添加断点续传、多文件批量下载等高级特性。 总之,AS3下载源码是AS3编程中关于网络通信和文件操作的重要部分,它结合URLLoader、URLRequest和FileReference等类,实现了从服务器下载文件并保存到本地的功能。...

    AIR 開發參考文檔

    5. **桌面集成**: 介绍如何利用AIR的桌面特性,如拖放操作、桌面通知、系统 tray图标和快捷键,以实现更自然的桌面体验。 6. **网络通信**: 讨论了如何通过HTTP、HTTPS、Socket或XMLSocket进行网络通信,以及如何...

    Flash+Flex+Air移动开发入门经典 pdf

    1.4 adobe air 31 1.5 小结 32 1.5.1 练习 32 1.5.2 本章所学内容 33 第2章 入门 35 2.1 使用flash builder 4.5.1 35 2.1.1 使用工作空间 36 .2.1.2 使用flash perspective 37 2.1.3 使用flash debug ...

    Adobe Flex中文教程

    - Flex应用可以打包成SWF文件,通过浏览器的Flash Player插件运行,也可以打包成AIR应用在桌面环境下运行。 9. **Flex Builder的特性** - Flash Builder提供了强大的调试工具,包括断点、变量查看、性能分析等。 ...

    Adobe Flash Builder 4 - Bitte lesen.pdf

    Adobe Flash Builder 4 是一款强大的集成开发环境(IDE),专门用于构建富互联网应用程序(RIA)和移动应用,尤其是基于Adobe Flex和ActionScript的项目。这款工具提供了高效的编码、调试和测试功能,使得开发者能够...

    BatchImageUpload

    同时,优化性能,比如使用断点续传,处理大文件时避免一次性加载到内存,以及使用合适的缓冲策略。 综上所述,“BatchImageUpload”涉及了Flex客户端的用户交互、文件处理、与Java后端的通信等多个环节。通过合理的...

    myEclipse下配置Flex文档

    Flex是一种用于创建富互联网应用程序(RIA)的开放源代码框架,它主要由Adobe公司开发,基于ActionScript和Flash Player或Adobe AIR运行时环境。在myEclipse环境下配置Flex文档是开发Flex应用程序的关键步骤,这对于...

Global site tag (gtag.js) - Google Analytics