FP10断点续传 源文件下载

Flash 断点续传 源文件下载
上一篇日志中给出了一些演示视频,这次释出代码。
AS代码是在一个星期内挤空闲时间写出来的,BUG还是有不少的。呵呵。
后台C#是边学边写的。
结构上经历过几次变动,由原来的单线上传变多线上传。
在显示上传进度上也花费了些时间。用于标志上传状态的MovieClip达到两千以后,
即使什么不做CPU也到了30%,于是对这部分优化,改成了位图显示。
多线上传方面,5线上传还是比较占用资源的,
因为文件的写入是独占式的,不可能真正的达到并发写入,
时间浪费在了请求资源这里,所以多线和单线没太大区别。
速度方面(XP的IIS5.1):
目前上传数据块大小是定值,未做成自动调节的,对速度的影响比较大。
设置为10KB,速度能稳定在600KB
设置为100KB时,可达到2MB
设置到1M时,峰值能到21MB
以上均为本地测试。
先天不足就是前文提到的要把文件先加载到内存中再上传,
再有就是使用过小的分块,会频繁的提交请求,会加大服务器的负担。
代码在这里下载:

http://code.google.com/p/kuploader/downloads/list

前后台之间的数据块通讯规则比较简单,这里只提供了一个方法抛砖引玉,呵呵。
欢迎大家拍砖。

18 comments to FP10断点续传 源文件下载

  • sdjs

    您好!今天向您的邮箱发送了一封请教的邮件,希望大哥您查收.主要是关于服务器端接受文件大于100K时,报文件句柄无效 的异常.期待您的回复.小弟万分感谢.

    [Reply]

  • shendian

    非常好,我也想研究研究,可是今天花了一天时间,还不是很明白;我的后台是JAVA;我跟踪测试了哈,怎么LocalFSOManager类里面的setFile(name:String, value:LocalFSO)方法一直没有执行;想特意请教您.
    不知道您的邮箱号,也无法发邮件给你;所以留下小弟的QQ号,希望得到您的指教.
    QQ:345910534
    [reply=auzn,2009-10-22 09:02 AM]我的邮箱:auzn1982#gmail.com
    SharedObject没有执行, 是否是禁用了本地存储呢?[/reply]

    [Reply]

  • 冰落禁城

    楼主,我很需要你的帮助,望能加我的QQ,当面请教您一些问题。
    QQ:78600403,备注:FLASH
    [reply=auzn,2009-09-08 06:45 PM]好, 给我写信吧. QQ基本不用作和大家交流的 :) [/reply]

    [Reply]

  • avitor

    请问你说的多线程可以单文件多线程上传吗?并发多个上传进程
    [reply=auzn,2009-06-29 03:41 PM]嘿嘿,这不是严格意义上的多线程,形似神似而已
    如果Flash中URLLoader是使用多线程上传加载文件的,那样和多线程还贴点边儿
    不过后台可以多线接收吧, 文件不是顺序写入的, 数据块中包含了文件块位置及文件块长度
    [/reply]

    [Reply]

  • zzz

    还有最重要的一个问题就是选择大文件上传时,比如300M,浏览器会报错:RunTime Error的错,然后就关闭,firefox是直接重起,这个这样解决哦?没找到办法
    [reply=auzn,2009-06-22 10:33 AM]好的.这个我会找个时间测试一下 :)
    最近十天不能上网,没有及时回复请见谅[/reply]

    [Reply]

  • zzz

    非常感谢auzn的耐心指导,[smile],前边的问题都基本解决了,不过还有几个问题:
    1,就是怎样把文件的一些参数传到后台去?比如是上传者,文件说明等等,我现在后台改成了servlet了.
    2:就是感觉传了文件如果不关浏览器的话,加载到flash的文件,内存没有释放,可不可以传完就释放哦?
    3:这个可以作成批量上传吗?

    [Reply]

  • zzz

    单个线程 好办,但是多个线程的就不知道怎么算百分比了…………[sad]
    [reply=auzn,2009-06-08 05:19 PM]也有办法,可以在主程序中加个计数器: var counter:uint = 0;
    然后每调用一次partCompleteHandler事件处理方法,counter就自加,
    然后再Math.floor(counter/总块数*100) :) [/reply]

    [Reply]

  • zzz

    看了半天还是没把上传进度的百分比整出来,楼主能把这个代码加上吗? 非常感谢!!
    [reply=auzn,2009-06-08 08:43 AM]最近可能还不行,找不到时间 :)
    主要修改还是在partCompleteHandler方法加入: Math.floor(当前块号码/总块数*100),可以尝试下 :) [/reply]

    [Reply]

  • zhf

    怎么没看到哦,你代码里只有显示个速度,,我是想用FLEX自带的进度条,横条的,不知道怎样加上去.
    楼主这么厉害,可以把这个转成FLEX的吗?你这个是actionscript的,不好改界面呢
    [reply=auzn,2009-06-05 03:15 PM]嗯.那些小方块就是用于显示进度的.你可以根据块数来做进度显示
    主程序中有个partCompleteHandler方法.
    这个在FLEX里面也是可用的.
    要做些修改,主要是显示UI等控件,上传类不用修改[/reply]

    [Reply]

  • zhf

    怎样添加 进度条和上传的百分比,还有剩余时间哦?怎样添加 进度条和上传的百分比,还有剩余时间哦?
    [reply=auzn,2009-06-05 12:39 AM]示例里面已经集成了 看代码吧 :) [/reply]

    [Reply]

  • xiaolei

    不错。下了也顶个[GoodLuck]
    [reply=auzn,2009-04-12 01:55 AM]:)[/reply]

    [Reply]

  • 阿好

    师兄,我现在也想实现flash断点上传,但看了半天你的思路我还是有疑问哈,你是一次性把分块好文件传到后台处理,还是,一块一块的传到后台处理啊,如果是一块一块的传到后台处理,频繁的请求后台,会不会有问题,,,,你的那个是怎么实现的,你的代码我还在研究中,但有很多看不明白哈,我的QQ:547574829,希望能与你交流哈,我是flash新手。
    [reply=auzn,2009-04-12 01:55 AM]嗯,分块上传的,上文中也谈及了这个问题了,呵呵[/reply]

    [Reply]

  • zero

    楼主好厉害啊。不过好像不是FTP上传。
    [reply=auzn,2009-03-19 08:33 AM]这个不是FTP上传 :)[/reply]

    [Reply]

  • hi

    请问你的文件断点信息(比如文件分几个块,每个块多大,每个块下载了多少),记录在哪儿的呢?
    下一次继续上传,从哪儿读取这些断点信息呢?
    [reply=auzn,2009-01-16 01:48 AM]选择文件后,先检查本地的SO中存的MD5信息是否和选择文件相同的,如果有相同数据,再判断是否已经上传成功,如果没有完成,会询问是否续传,如果选择是,那么就将文件的信息发送给后台,后台根据文件信息判断是否存在此文件,并根据文件信息返回需要续传的块序号,然后FLASH根据这些序号上传。
    上传时,后台接收成功一个块,就会在日志文件写入相应的块信息,便于下次查询
    如果上传成功,则将日志信息删除,本地SO中更新上传状态
    大概就这个思路吧,逻辑上还不算严谨。[/reply]
    [reply=auzn,2009-01-16 01:51 AM]当序号数组上传完毕后,会向后台发送校验请求,后台核对日志文件,如果有未上传的块,再次返回给FLASH重新上传,否则此次文件上传完成。
    [/reply]

    [Reply]

  • frank

    做得不错, 可以尝试多写点,比如注释阿~文档阿~例子呀 专业些,顶!
    [reply=auzn,2009-01-11 12:17 AM]呵呵,谢谢你的建议 :) [/reply]

    [Reply]

  • Kevin

    嘿嘿,试试
    [reply=auzn,2008-12-23 08:51 AM]试试 :) [/reply]

    [Reply]

  • long

    感谢分享~~~
    [reply=auzn,2008-12-23 08:51 AM]呵呵[/reply]

    [Reply]

  • lqliang

    支持楼主!
    太有才了![razz]
    [reply=auzn,2008-12-19 03:43 PM]欢迎试用哈[/reply]

    [Reply]

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">