Каталог Adobe AIR для перетаскивания - PullRequest
1 голос
/ 12 октября 2009

Пожалуйста, дайте мне знать, как я могу перетащить каталог из окон на панель Adobe AIR. Папка имеет вложенные папки внутри. Подпапки имеют много файлов. Я хочу перетащить родительскую папку и оставить ее так, чтобы вся структура была загружена. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 23 ноября 2009

Довольно легко загружать папки. При обнаружении сброса с помощью события 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
        }
    }

Затем вы можете выполнить рекурсию через объект, добавляя файлы и файлы на сервер по мере необходимости

0 голосов
/ 25 января 2013

Вот полный пример. Просто вызовите метод 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);
}
...