守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 820|回复: 0

[AIR技术] Air应用中的文件拖放

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51696
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-10 22:32:22 | 显示全部楼层 |阅读模式
    1. 把文件从本地操作系统拖入AIR客户端程序.实际上是上传文件到服务器的过程。

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
    3.                                            xmlns:s="library://ns.adobe.com/flex/spark"
    4.                                            xmlns:mx="library://ns.adobe.com/flex/mx" nativeDragDrop="dropFile(event)"
    5.                                            nativeDragEnter="startDrag2(event)" creationComplete="init()"
    6.                                            >
    7.         <fx:Declarations>
    8.                 <!-- Place non-visual elements (e.g., services, value objects) here -->
    9.         </fx:Declarations>
    10.         <fx:Script>
    11.                 <![CDATA[
    12.                         private function init():void
    13.                         {
    14.                         }
    15.                         
    16.                         private function startDrag2(event:NativeDragEvent):void
    17.                         {
    18.                                 var clip:Clipboard = event.clipboard;
    19.                                 if(clip.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
    20.                                 {
    21.                                         var arr:Array = clip.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
    22.                                 }
    23.                                 NativeDragManager.acceptDragDrop(this);
    24.                         }
    25.                         
    26.                         private function dropFile(event:NativeDragEvent):void
    27.                         {
    28.                                 var clip:Clipboard = event.clipboard;
    29.                                 if(clip.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
    30.                                 {
    31.                                         var arr:Array = clip.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
    32.                                         var file:File = arr[0] as File;
    33.                                         if(file.isDirectory)
    34.                                         {
    35.                                                 var fileLst:Array = file.getDirectoryListing();
    36.                                         }
    37.                                 }
    38.                         }
    39.                 ]]>
    40.         </fx:Script>
    41. </s:WindowedApplication>
    复制代码
    在dropFile函数中,可以得到剪贴板中所有正在拖动的本地文件引用(flash.filesystem.File),有了这些本地文件引用后,就可以用如下方法,把本地文件上传到服务器了。
    1. flash.net.FileReference.upload(request:URLRequest, uploadDataFieldName:String="Filedata", testUpload:Boolean=false):void
    复制代码
    2. 把AIR客户端中的文件拖放到(下载到)本地操作系统。实际上是文件下载的过程
    1. var file_promise_array:Array = [];
    2. var cb:Clipboard = new Clipboard();
    3. var fp:URLFilePromise = new URLFilePromise();
    4. var drag_component:DisplayObject;
    5.                                                                                 fp.request = new URLRequest((renderer.data as FileVO).resource_url);
    6. fp.request.manageCookies = false;
    7. fp.relativePath = (renderer.data as FileVO).name;
    8. //fp.addEventListener(ProgressEvent.PROGRESS, fpProgressHandler);                        //fp.addEventListener(IOErrorEvent.IO_ERROR, fpIOErrorHandler);                                                                file_promise_array.push(fp);
    9. if (file_promise_array && file_promise_array.length)
    10.         cb.setData(ClipboardFormats.FILE_PROMISE_LIST_FORMAT, file_promise_array);

    11. var bd:BitmapData = new BitmapData(drag_component.width, drag_component.height, true, 0x000000);
    12. bd.draw(drag_component);
    13. var ndo:NativeDragOptions = new NativeDragOptions();
    14. ndo.allowMove = false;
    15. ndo.allowCopy = true;
    16. ndo.allowLink = false;
    17. NativeDragManager.doDrag(drag_component, cb, bd, null, ndo);
    复制代码
    URLFilePromise 是封装度相当高的类,文件何时开始下载,无法通过程序来控制,当文件被用户从AIR程序中拖放到本地桌面或者文件夹后,下载过程自动开始,这点上和URLLoader类是大不相同地。在用URLLoader类下载东西时,必须先指定好下载路径(URLRequest),再显式调用URLLoader类 的load()方法,下载过程才会开始,程序是可以控制URLLoader 何时开始下载的,URLFilePromise  类何时开始下载,取决于用户何时完成拖放操作。
    创建 URL file promise:
    • 构建并初始化一个或多个 URLFilePromise 对象。
    • 将 URLFilePromise 对象添加到数组。
    • 使用 ClipboardFormat FILE_PROMISE_LIST 为新 Clipboard 对象添加数组。
    • 响应用户手势,调用 NativeDragManager startDrag() 方法,传递包含 file promise 数组的 Clipboard 对象。


    参考:
    http://help.adobe.com/zh_CN/Flas ... URLFilePromise.html
    http://help.adobe.com/en_US/Flas ... ktop/Clipboard.html



    来源:
    Air应用中的文件拖放
    http://bbs.9ria.com/forum.php?mod=viewthread&tid=149716&fromuid=229622


    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-8-25 18:12 , Processed in 0.039094 second(s), 33 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表