jQuery File Upload Plugin: هل من الممكن الحفاظ على بنية المجلدات التي تم تحميلها؟



blueimp (1)

يجب أن يكون هذا ممكنًا في متصفحات webkit باستخدام كائن .dataTransfer والإفلات .dataTransfer في حدث drop ؛ .webkitGetAsEntry() ؛ webkitRequestFileSystem getDirectory() لإنشاء دليل له نفس اسم المجلد الذي تم تحميله ، .createReader() على DirectoryEntry ، readEntries() لتكرار الإدخالات في الدليل ، اتصل بـ .copyTo() لكل FileEntry يتم إنشاؤه مع اسم الدليل الذي تم تحميله.

يجب أن يكون المجلد الآن webkitRequestFileSystem() باستخدام إما webkitRequestFileSystem() ، ثم استدعاء .getDirectory() باسم الدليل كمعلمة أولى وكائن خيارات فارغة {} كمعلمة ثانية.

بدلاً من ذلك ، يمكن الوصول إلى المجلد من نظام ملفات المستخدم الفعلي في chrome أو chromeium profile folder باستخدام واجهة المستخدم لإدارة الملفات أو واجهة سطر الأوامر. أو قم بإنشاء برنامج نصي محلي لنسخ المجلدات في File System إلى دليل آخر ، وإعادة تسمية المجلدات إلى الأسماء الأصلية للمجلدات التي تم تحميلها. لا يتم ضبط مسارات الملفات والمجلدات ، فقط أسماء المجلدات.

قادر على الحفاظ على بنية المجلدات الفرعية التي تم تحميلها (= تحميل مجلد واحد مع 3 مجلدات فرعية ، يحتوي كل منها على عدة ملفات)؟

في مدير الملفات ، لن يتم تسمية المجلد بنفس اسم الدليل الذي تم تحميله ، على الرغم من أنه ينبغي الاحتفاظ بهيكل المجلد والملف. يجب أن يكون المجلد موجودًا في المجلد الأخير في File System في مجلد ملف تعريف chrome ، قبل مجلد Origins . راجع أيضًا كيفية الكتابة في ملف (دليل المستخدم) باستخدام 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

أحاول هذا البرنامج المساعد ( https://github.com/blueimp/jQuery-File-Upload ) وممتع في تحميل المجلد.

أتساءل ما إذا كان المكون الإضافي قادرًا على الحفاظ على بنية المجلدات الفرعية التي تم تحميلها (= تحميل مجلد واحد مع 3 مجلدات فرعية ، يحتوي كل منها على عدة ملفات)؟





blueimp