jQuery文件上传插件:是否可以保留上传文件夹的结构?

我正在尝试这个插件( https://github.com/blueimp/jQuery-File-Upload )并且有趣的文件夹上传。

我想知道插件是否能够保留上传的子文件夹的结构(=上传1个带有3个子文件夹的文件夹,每个包含几个文件)?

这应该可以在webkit浏览器中使用drop事件中的拖放.dataTransfer对象实现; .webkitGetAsEntry() ; webkitRequestFileSystem getDirectory()用于创建与上载文件夹.createReader() DirectoryEntryDirectoryEntry上的.createReader()readEntries()用于迭代目录中的条目,为每个FileEntry调用.copyTo() ,目的地为已创建目录,上载目录名称。

现在可以使用webkitRequestFileSystem()访问该文件夹,然后使用目录名作为第一个参数调用.getDirectory() ,并将空选项对象{}作为第二个参数。

或者,可以使用文件管理器gui或命令行界面从chrome或chromium配置文件文件夹中的实际用户文件系统访问文件夹。 或者,创建本地脚本以将File System中的File System夹复制到另一个目录,并将文件夹重命名为已上载文件夹的原始名称。 不调整文件夹和文件路径,仅调整文件夹名称。

能够保留上传子文件夹的结构(=上传1个包含3个子文件夹的文件夹,每个子文件夹包含多个文件)?

在文件管理器中,文件夹的名称与上传的目录不同,但应保留文件夹和文件结构。 该文件夹应位于Origins文件夹之前的chrome profile文件夹的File System中的最后一个文件夹中。 另请参见如何使用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