<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       creationComplete="init()" >
<fx:Script>
<![CDATA[
            import mx.controls.Alert;
            private var _uploadURLRequest:URLRequest;
            private var _fileRef:FileReference;
           private function init():void{                _uploadURLRequest = new URLRequest();
                _uploadURLRequest.url = "http://localhost/upload/uploadPHP.php";
                _fileRef = new FileReference();
                configureListeners(_fileRef);
            }
            private function configureListeners(dispatcher:IEventDispatcher):void{                dispatcher.addEventListener(Event.SELECT,onSelect);
                dispatcher.addEventListener(ProgressEvent.PROGRESS,onProgress);
                dispatcher.addEventListener(Event.COMPLETE,onComplete);
                //dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUploadComplete);
            }
            private function onSelect(event:Event):void{                _fileRef = FileReference(event.target);
                uploadBtn.enabled = true;
                picSrc.text = _fileRef.name;
            }
            private function doSelect():void{                var fileFilter:FileFilter = new FileFilter("Images(*.jpg,*.jpeg,*.gif,*.png)",
                    "*.jpg;*.jpeg;*.gif;*.png");
                var allTypes:Array = new Array(fileFilter);
                _fileRef.browse(allTypes);
            }
            private function doUpload():void{                var variables:URLVariables = new URLVariables();
                variables.username= "ddonng";
                variables.filename = "user_name" + "_"+ new Date().time;
                variables.extension = _fileRef.extension;
                _uploadURLRequest.method = URLRequestMethod.POST;
                _uploadURLRequest.data = variables;
               _fileRef.upload(_uploadURLRequest);
                progressBar.visible = true;
            }
            private function onProgress(event:ProgressEvent):void{                progressBar.setProgress(event.bytesLoaded/event.bytesTotal*100,100);
                progressBar.label = "当前进度" + (event.bytesLoaded/event.bytesTotal*100) + "%";
            }
            private function onComplete(event:Event):void{                Alert.show("图片上传成功!","TIP");
                uploadBtn.enabled =  false;
            }
        ]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:VGroup>
<s:TextInput id="picSrc" />
<s:Button id="browseBtn" label="浏览图片" click="doSelect()"/>
<s:Button id="uploadBtn" label="上传文件" click="doUpload()" enabled="false"/>
<mx:ProgressBar id="progressBar" minimum="0" maximum="100"
                        label="当前进度 0%" visible="false" mode="manual"/>
</s:VGroup>
</s:WindowedApplication>
 
 
 
 
 

<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init();" > <fx:Script> <![CDATA[ import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.utils.ByteArray;   import mx.controls.Alert; [Bindable] private var progress:Number = 0; private var contentLength:int = 0; private var fileDir:File; private var file:File; private var startPoint:int = 0; private var endPoint:int = 0; private var rangeLoader:URLLoader;   private var range:int = 50000;   [Bindable] private var downloadStatus:Boolean = false;   private function init():void { var dotSplitLength:uint = videoURL.text.split("/").length;//这两行代码是为了获取下载文件的名称 var fileName:String = videoURL.text.split("/")[dotSplitLength-1]; var username:String = "iove86";//如果多用户,则这里取出用户名来建目录(我需要的功能) var downloadDir:String = "F:/myfiles/"+username+"/"; fileDir = new File(downloadDir);//File可以是文件也可以是目录,但是要用来创建目录时,显然不能为文件 try{ fileDir.createDirectory(); }catch(err:Error){ Alert.show("文件建立发生错误!","MSG"); } file = new File(downloadDir+fileName);//创建一个和下载文件名称一致的文件,保存在D盘temp目录下 }   private function doDownload():void {//先发送一个下载请求,可以得到文件的真实尺寸 var getContentLengthRequest:URLRequest = new URLRequest(videoURL.text); var getContentLengthLoader:URLLoader = new URLLoader(); getContentLengthLoader.addEventListener(ProgressEvent.PROGRESS ,function(e:ProgressEvent):void { contentLength = getContentLengthLoader.bytesTotal;//得到文件的真实尺寸 getContentLengthLoader.close();//停止下载 downloadByRange();//按照断点续传的方式下载 }); getContentLengthLoader.load(getContentLengthRequest); } private function downloadByRange():void {//按照断点续传的方式下载 downloadStatus = true; var fileStr:FileStream = new FileStream(); if(file.exists) {//如果文件是存在的,就说明下载过,需要计算从哪个点开始下载 fileStr.open(file, FileMode.READ); startPoint = fileStr.bytesAvailable;//计算从哪个点开始下载 fileStr.close();//关闭文件流 } trace("start:"+startPoint); if(startPoint+range > contentLength) {//确定下载的区间范围,比如0-10000 endPoint = contentLength; } else { endPoint = startPoint+range; } var rangeRequest:URLRequest = new URLRequest(videoURL.text); var header:URLRequestHeader = new URLRequestHeader("Range", "bytes="+startPoint+"-"+endPoint);//注意这里很关键,我们在请求的Header里包含对Range的描述,这样服务器会返回文件的某个部分 rangeRequest.requestHeaders.push(header);//将头信息添加到请求里 rangeLoader = new URLLoader(); rangeLoader.dataFormat = URLLoaderDataFormat.BINARY;//设置数据类型为字节 rangeLoader.addEventListener(Event.COMPLETE ,function(e:Event):void { var currentData:ByteArray = rangeLoader.data;//得到下载的数据 fileStr = new FileStream(); fileStr.open(file, FileMode.UPDATE); fileStr.position = fileStr.bytesAvailable;//将指针指向文件尾 fileStr.writeBytes(currentData, 0, currentData.length);//在文件中写入新下载的数据 fileStr.close();//关闭文件流 progress = endPoint/contentLength * 100;//计算下载进程 if(progress < 100) { downloadByRange();//如果下载没有完成,则执行下一个断点下载,直到下载完毕整个文件 } }); rangeLoader.load(rangeRequest);//发起请求 } private function pause():void {//暂停下载 downloadStatus = false; rangeLoader.close(); } private function open():void { file.openWithDefaultApplication(); } ]]> </fx:Script> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <mx:Form x="29" y="26" width="50%" height="309"> <mx:FormItem label="URL"> <mx:TextInput id="videoURL" width="253" text="http://levis.ogilvy.com.cn/hk/media/background.mp3"/> </mx:FormItem> <mx:FormItem label="进度"> <mx:Label text="{progress+'%'}"/> </mx:FormItem> <mx:FormItem label="Label"> <mx:Button label="下载" click="doDownload();btDownload.visible=false" id="btDownload"/> </mx:FormItem> <mx:FormItem label="Label"> <mx:Button label="暂停" visible="{downloadStatus}" click="pause()"/> <mx:Button label="继续" visible="{!downloadStatus}" click="downloadByRange()"/> <mx:Button label="打开" visible="{progress==100}" click="open()"/> </mx:FormItem> </mx:Form> </s:WindowedApplication>

来自:http://iove86.sinaapp.com/adobe-air/air-upload-and-download-file.html

AIR文件上传与文件断点续传方式下载相关推荐

  1. 文件上传的三种方式-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  2. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  3. java文件上传_Java文件上传细讲

    什么是文件上传? 文件上传就是把用户的信息保存起来. 为什么需要文件上传? 在用户注册的时候,可能需要用户提交照片.那么这张照片就应该要进行保存. 上传组件(工具) 为什么我们要使用上传工具? 为啥我 ...

  4. httpclient base64 文件上传_文件上传下载

    说道文件上传下载,这个业务需求并不是很复杂思想如下 1.将文件上传到 某台服务器上的指定的路径下也可以这样理解 文件上传就是将本地图片发送到别的地方,下载就是将别的地方的图片放在本地 2.将路径同文件 ...

  5. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  6. 通达OA未授权任意文件上传及文件包含漏洞分析学习

    今年3月份通达OA爆出了文件上传和文件包含漏洞,网络上很多复现和分析的博客,今天我也来试着分析分析,据360灵腾安全实验室判断该漏洞等级为高,利用难度低,威胁程度高,所以可能比较适合代码审计的新手来练 ...

  7. 渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

    漏洞数据库:https://www.exploit-db.com/google-hacking-database 1.渗透测试 实用 浏览器插件 chrome.edge 插件:搜索 cookie,安装 ...

  8. 文件上传、文件包含和目路遍历杂谈

    一.说明 文件上传.文件包含和目路遍历是<黑客防线>盛行的时代常谈的getshell手法,但到现在的安全书藉感觉就比较少提及或一笔带过.在谈的年代看不懂,在看得懂的年代又不谈了,概念感觉总 ...

  9. Dropzone单文件上传、多文件上传、文件夹上传,springmvc接收,上传至Minio的一系列问题

    0 前言 1.项目需要上传文件和大量的文件夹,页面只有一个input file标签会很丑,偶然间得知dropzone类库, 决定使用. 2. 项目后端采用springmvc接收,调用minio代码上传 ...

  10. Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点

    前言 (补充:再linux服务器上可能没用创建文件的权限,那就需要找到文件夹给权限,比如我的chmod -R 777 /home/tomcat/apache-tomcat-default/webapp ...

最新文章

  1. SpringBoot整合Grpc实现跨语言RPC通讯
  2. 微软私有云分享(R2)26配置基线与更新
  3. Bellman-Ford算法——为什么要循环n-1次?图有n个点,又不能有回路,所以最短路径最多n-1边。又因为每次循环,至少relax一边所以最多n-1次就行了!...
  4. 深度神经网络:WX+b vs XW+b
  5. 求链表倒数第k个结点
  6. mybaties总结+hibernate总结
  7. java重入锁,再探JAVA重入锁
  8. 2014年考研英语一完型填空知识点
  9. 教资支付显示找不到服务器,教师资格证报名支付的问题,点了支付总是找不到服..._教师资格考试_帮考网...
  10. 20200421:周赛练习题(leetcode148周周赛上)
  11. 利用navicat将数据库中的查询结果导出文件
  12. Genius‘s Gambit(构造)
  13. Spring Batch之Job级拦截器实现(四)
  14. 利用Java编写自动关机程序(包括输入、输出、控制电脑自动关机)
  15. CryEngine架构概览
  16. 计算机软件在生物学应用,计算机辅助教学软件在生物教学中的应用
  17. vue print 解决针式打印机打印失败不清晰的问题
  18. HDU 3687 National Day Parade(暴力)
  19. 单片机c语言程序编写步骤,用c语言编写单片机流水灯程序详解
  20. java 电子围栏_基于H5与webGL的 3d 电子围栏展示

热门文章

  1. ssis for循环容器_SSIS Foreach循环与For循环容器
  2. bcp大容量复制实用工具_运行中的BCP(大容量复制程序)命令
  3. 如何对SQL Server实例执行性能测试
  4. iOS中如何添加自定义的字体库
  5. 算法(第四版)C# 习题题解——1.2
  6. 奇人有奇书(李渔、张岱、陈继儒、吴敬梓)
  7. QStackedWidget设置无效问题
  8. 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(二)
  9. 中山纪念中学培训DAY1
  10. form表单中的enctype=multipart/form-data什么意思?