2009-10-12 3 views
1

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

ответ

1

Загружать папки довольно легко. Когда вы обнаруживаете падение с помощью события drop, вы получаете предоставленный wit ha список удаленных файлов. Затем вы можете определить, является ли это отброшенным файлом, и если да, то вы можете получить все файлы, перечисленные под ним (включая файлы), и если какие-либо из них являются папками, а затем перейдите дальше.

В основном, 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

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