2016-05-08 14 views

Antwort

1

Dies sollte bei webkit Browsern per Drag-and-Drop .dataTransfer Objekt bei drop Ereignis möglich sein; .webkitGetAsEntry(); webkitRequestFileSystemgetDirectory() zum Erstellen Verzeichnis mit dem gleichen Namen wie hochgeladene Ordner, .createReader() auf DirectoryEntry, readEntries(), um Einträge im Verzeichnis zu iterieren, rufen Sie .copyTo() für jede FileEntry mit Ziel erstellt Verzeichnis mit hochgeladenen Verzeichnisnamen.

Der Ordner sollte jetzt entweder mit webkitRequestFileSystem() zugänglich sein und dann .getDirectory() mit dem Verzeichnisnamen als ersten Parameter und dem leeren Optionsobjekt {} als zweiten Parameter aufrufen.

Alternativ kann Ordner von tatsächlichen Benutzer Dateisystem im Chrom oder Chrom Profilordner mit Datei-Manager GUI oder Befehlszeilenschnittstelle zugreifen. Oder erstellen Sie ein lokales Skript, um Ordner in File System in ein anderes Verzeichnis zu kopieren, und benennen Sie Ordner in ursprüngliche Namen von Ordnern um, die hochgeladen wurden. Die Ordner- und Dateipfade werden nicht angepasst, nur die Ordnernamen.

ist in der Lage, die Struktur von hochgeladenen Unterordner zu erhalten (= 1 Ordner mit 3 Unterordner zu, die jeweils mehr Dateien enthält)?

Beim Dateimanager würde der Ordner nicht das gleiche wie hochgeladenes Verzeichnis benannt werden, obwohl Ordner- und Dateistruktur beibehalten werden sollte. Der Ordner sollte sich im Ordner File System im Ordner chrome profile vor dem Ordner Origins im letzten Ordner befinden. Siehe auch How to Write in file (user directory) using JavaScript?

function errorHandler(e) { 
    console.log(e) 
} 

function handleFiles(e) { 
    console.log("file", file) 
} 

function handleDrop(event) { 
    var dt = event.dataTransfer; 
    for (var i = 0; i < event.dataTransfer.items.length; i++) { 
    var entry = dt.items[i].webkitGetAsEntry(); 
    if (entry.isFile) { 
     console.log("isFile", entry.isFile, entry); 
     entry.file(handleFiles); 
    } else if (entry.isDirectory) { 
     console.log("isDirectory", entry.isDirectory, entry); 
     window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024 
     , function(fs) { 
     // create directory with uploaded directory name 
     fs.root.getDirectory(entry.name, { 
      create: true 
     }, function(dirEntry) { 
      // read folders, files in uploaded directory 
      var reader = entry.createReader(); 
      reader.readEntries(function(entries) { 
      entries.forEach(function(file) { 
       // copy files to new directory 
       file.copyTo(dirEntry); 
       console.log("file:", file, "\ncopied to directory:", dirEntry) 
      }) 
      }) 
     }, errorHandler) 
     }, errorHandler) 
    } 
    } 
} 

plnkr http://plnkr.co/edit/oUIhwUc3CDxI64SrvxIh?p=preview

+0

@TomK Es ist auch möglich zu nutzen '' Element einzelne oder mehrere Dateien, Ordner mit Upload-Dialog oder zum Hochladen von Drag & Drop-by-include-Attribut "multiple" und Umschalten des Attributs "webkitdirectory"; Verwenden von 'createWriter()', um die Datei in das erstellte Verzeichnis zu schreiben. – guest271314