2009-10-12 9 views
1

Veuillez me faire savoir comment puis-je faire glisser et déposer un répertoire à partir de Windows sur le panneau Adobe AIR. Le dossier contient des sous-dossiers. Les sous-dossiers ont beaucoup de fichiers. Je veux faire glisser le dossier parent et le déposer de sorte que toute la structure doit être téléchargée. S'il vous plaît aider.Adobe AIR glisser-déposer du répertoire

Répondre

1

Il est plutôt facile de télécharger des dossiers. Lors de la détection d'une chute à l'aide de l'événement drop, vous obtenez la liste des fichiers supprimés. Vous pouvez ensuite déterminer si le fichier déposé est un dossier, et si c'est le cas, alors vous pouvez obtenir tous les fichiers listés sous (y compris les fichiers) et si ceux-ci sont des dossiers, alors recurse plus bas.

Fondamentalement, Adobe Air traite les fichiers et les dossiers comme le même objet.

En cas de chute mis

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 
     } 
    } 

Vous pouvez ensuite récursif à travers l'objet l'ajout de fichiers et fichiers sur le serveur selon les besoins

0

Voici l'exemple complet. Appelez simplement la méthode onInit() lors de l'initialisation de l'application.

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); 
}