Adobe AIR拖放目录

时间:2009-10-12 10:25:22

标签: drag-and-drop air directory

请告诉我如何将目录从Windows拖放到Adobe AIR面板上。 该文件夹里面有子文件夹。子文件夹有很多文件。 我想拖动父文件夹并将其删除,以便整个结构必须上传。 请帮忙。

2 个答案:

答案 0 :(得分:1)

上传文件夹相当容易。使用drop事件检测到drop时,会提供删除的文件列表。然后,您可以确定删除的文件是否是文件夹,如果是,则可以获取其下列出的所有文件(包括文件),如果其中任何文件是文件夹,则进一步向下递归。

基本上,adobe air将文件和文件夹视为同一个对象。

在放置事件中

var files = event.dataTransfer.getData( "application/x-vnd.adobe.air.file-list" );

    var fileData = [];
    for (var f = 0; f < files.length; f++)
    {
        if (files[f].isDirectory) {
                //process this folder recursing through subfolders
        } else {
                //we have a file
        }
    }

然后,您可以根据需要递归通过将文件和文件添加到服务器的对象

答案 1 :(得分:0)

这是完整的例子。只需在应用程序初始化时调用onInit()方法。

private function onInit(event:FlexEvent):void
{
    this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
    this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDrop);
}

private function onDragIn(event : NativeDragEvent):void
{
    NativeDragManager.acceptDragDrop(this);
}

private function onDrop(event : NativeDragEvent):void
{
    try
    {
        var dropfiles:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
        processDroppedFiles(dropfiles);
    }
    catch (error : IOError)
    {
        trace("Error during drag-and-drop procedure.");
    }
}

private function processDroppedFiles(files : Array):void
{
    for each (var file:File in files)
    {
        if (file.isDirectory)
        {
            processDirectory(file);
        }
        else
        {
            processFile(file);
        }
    }
}

private function processDirectory(dir : File):void
{
    processDroppedFiles(dir.getDirectoryListing());
}

private function processFile(file:File):void
{
    trace(file);
}