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

Adobe AIR 2 以降

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

if( Clipboard.supportsFilePromise ) 
{ 
    var filePromise:URLFilePromise = new URLFilePromise(); 
    filePromise.request = new URLRequest("http://example.com/foo.txt"); 
    filePromise.relativePath = "bar.txt"; 
 
    var fileList:Array = new Array( filePromise ); 
    var clipboard:Clipboard = new Clipboard(); 
    clipboard.setData( ClipboardFormats.FILE_PROMISE_LIST_FORMAT, fileList ); 
    NativeDragManager.doDrag( dragSource, clipboard ); 
}

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

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

if( Clipboard.supportsFilePromise ) 
{     //Create the promise objects 
    var filePromise:URLFilePromise = new URLFilePromise(); 
    filePromise.request = new URLRequest("http://example.com/article.html"); 
    filePromise.relativePath = "article.html"; 
 
    var image1Promise:URLFilePromise = new URLFilePromise(); 
    image1Promise.request = new URLRequest("http://example.com/images/img_1.jpg"); 
    image1Promise.relativePath = "images/img_1.html"; 
    var image2Promise:URLFilePromise = new URLFilePromise(); 
    image2Promise.request = new 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:Array = new Array( filePromise, image1Promise, image2Promise ); 
    var clipboard:Clipboard = new Clipboard(); 
    clipboard.setData( ClipboardFormats.FILE_PROMISE_LIST_FORMAT, fileList ); 
    //Start the drag operation 
    NativeDragManager.doDrag( dragSource, clipboard ); 
}