2016-05-08 2 views
1

私はこのプラグイン(https://github.com/blueimp/jQuery-File-Upload)を試していて、フォルダのアップロードに興味があります。jQuery File Upload Plugin:アップロードされたフォルダの構造を保持することは可能ですか?

アップロードされたサブフォルダの構造を保持できますか(= 1つのフォルダを3つのサブフォルダでアップロードし、それぞれに複数のファイルが含まれています)?

答えて

1

これは、webkitブラウザでドラッグアンドドロップを使用して可能です。.dataTransferオブジェクトはdropイベントになります。 .webkitGetAsEntry();ディレクトリ内のエントリを反復する、アップロードされたフォルダと同じ名前を持つreadEntries()DirectoryEntry.createReader()をディレクトリを作成するwebkitRequestFileSystemgetDirectory()、ディレクトリ名をアップロードしたディレクトリを作成している先で各FileEntryため.copyTo()を呼び出します。

webkitRequestFileSystem()のいずれかを使用してフォルダーにアクセスできるようになり、最初のパラメーターとしてディレクトリ名を持つ.getDirectory()を呼び出し、2番目のパラメーターとして空のオプションオブジェクト{}を呼び出します。

また、ファイルマネージャGUIまたはコマンドラインインターフェイスを使用して、実際のユーザーファイルシステムからchromeまたはchromiumプロファイルフォルダのフォルダにアクセスすることもできます。 またはFile Systemのフォルダを別のディレクトリにコピーするローカルスクリプトを作成し、アップロードしたフォルダの元の名前にフォルダの名前を変更します。フォルダとファイルのパスは調整されず、フォルダ名のみが調整されます。

アップロードされたサブフォルダの構造を保存することができます(アップロードする 1つのフォルダに3つのサブフォルダがあり、それぞれに複数のファイルが含まれています)。

ファイルマネージャでは、フォルダとファイル構造を保持する必要がありますが、フォルダはアップロードされたディレクトリと同じ名前にはなりません。フォルダは、Originsフォルダの前に、クロムプロファイルフォルダの最後のフォルダFile Systemに配置する必要があります。参照してください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) 
    } 
    } 
} 

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

+0

'のを利用することも可能である@TomK plnkr'使用して、単一または複数のファイル、フォルダをアップロードする要素のアップロードダイアログやドラッグ& 'multiple'属性を含み、' webkitdirectory'属性をトグルすることによってドロップします。 'createWriter()'を使って作成したディレクトリにファイルを書き出します。 – guest271314

関連する問題