リモートファイルのドロップ

Adobe AIR 2 以降

URL 上のファイルまたはデータを表すファイルプロミスオブジェクトの作成には、URLFilePromise クラスを使用します。 FILE_PROMISE_LIST クリップボード形式を使用して、1 つまたは複数のファイルプロミスオブジェクトをクリップボードに追加します。次の例では、http://www.example.com/foo.txt にある単一のファイルがダウンロードされ、ドロップ位置に bar.txt という名前で保存されます。リモートとローカルのファイル名を一致させる必要はありません。

<html> 
<head> 
<script src="AIRAliases.js"></script> 
<script src="aircore.swf" type="application/x-shockwave-flash"></script> 
<script language="javascript"> 
    function init(){ 
        var source = document.getElementById('source'); 
        source.addEventListener("dragstart", dragStartHandler); 
    } 
     
    function dragStartHandler(event){         
        event.preventDefault(); 
        startDrag(); 
    } 
    function startDrag() 
    { 
        var filePromise = new air.URLFilePromise(); //defined in aircore.swf 
        filePromise.request = new air.URLRequest("http://example.com/foo.txt"); 
        filePromise.relativePath = "bar.txt"; 
        var fileList = new Array( filePromise ); 
        var clipboard = new air.Clipboard(); 
        clipboard.setData( air.ClipboardFormats.FILE_PROMISE_LIST_FORMAT, fileList ); 
        air.NativeDragManager.doDrag( window.htmlLoader, clipboard ); 
    }     
</script> 
</head> 
<body onLoad="init()"> 
    <p id="source" style="-webkit-user-drag:element; -webkit-user-select:none;"> 
        Drag to file system 
    </p> 
</body> 
</html>

クリップボードに割り当てられている配列にファイルプロミスオブジェクトをさらに追加すると、一度に複数のファイルをドラッグできます。また、 relativePath プロパティでサブディレクトリを指定して、操作に含まれているファイルの一部または全部をドロップ位置と相対的なサブフォルダーに配置することもできます。

次の例は、複数のファイルプロミスを含むドラッグ操作の開始方法を示しています。この例では、html ページ article.html が、2 つのリンクされたイメージファイルと共にファイルプロミスとしてクリップボードに配置されます。イメージは images サブフォルダーにコピーされ、相対リンクが維持されます。

<html> 
<head> 
<script src="AIRAliases.js"></script> 
<script src="aircore.swf" type="application/x-shockwave-flash"></script> 
<script language="javascript"> 
    function init(){ 
        var source = document.getElementById('source'); 
        source.addEventListener("dragstart", dragStartHandler); 
    } 
     
    function dragStartHandler(event){         
        event.preventDefault(); 
        startDrag(); 
    } 
    function startDrag() 
    { 
        var filePromise = new air.URLFilePromise(); 
        filePromise.request = new air.URLRequest("http://example.com/article.html"); 
        filePromise.relativePath = "article.html"; 
     
        var image1Promise = new air.URLFilePromise(); 
        image1Promise.request = new air.URLRequest("http://example.com/images/img_1.jpg"); 
        image1Promise.relativePath = "images/img_1.html"; 
        var image2Promise = new air.URLFilePromise(); 
        image2Promise.request = new air.URLRequest("http://example.com/images/img_2.jpg"); 
        image2Promise.relativePath = "images/img_2.jpg"; 
         
        //Put the promise objects onto the clipboard inside an array 
        var fileList = new Array( filePromise, image1Promise, image2Promise ); 
        var clipboard = new air.Clipboard(); 
        clipboard.setData( air.ClipboardFormats.FILE_PROMISE_LIST_FORMAT, fileList ); 
        air.NativeDragManager.doDrag( window.htmlLoader, clipboard ); 
    }     
</script> 
</head> 
<body onLoad="init()"> 
    <p id="source" style="-webkit-user-drag:element; -webkit-user-select:none;"> 
        Drag to file system 
    </p> 
</body> 
</html>