Скопируйте каталог с веб-сервера на подключенный сетевой диск - PullRequest
1 голос
/ 20 января 2010

Для проекта PHP, над которым я работаю, уделяя особое внимание однородности данных, можно управлять определенной структурой каталогов.

После того, как пользователь завершает процесс создания объекта (я не буду беспокоить вас, ребята, со всеми деталями проекта), эту структуру каталогов следует скопировать на подключенный сетевой диск.

Поскольку пользователи могут иметь сетевой привод, сопоставленный с другой буквой диска, я использую javascript (FileSystemObject), чтобы получить букву диска.

Это все в порядке. Но теперь наступает сложная часть. Как я могу скопировать свою структуру каталогов, управляемую на веб-сервере созданным веб-приложением, в этот сетевой привод?

Я знаю, что могу использовать FSO для создания новых каталогов, моя проблема в том, как передать рекурсивную структуру каталогов из PHP в javascript.

Ответы [ 4 ]

1 голос
/ 20 января 2010

Поскольку вы не можете скопировать структуру каталогов с использованием HTTP, вам придется создать вспомогательный объект, который будет содержать информацию о каталоге. Я бы использовал массив, экспортированный через JSON в JS. Структура массива будет выглядеть так:

array(1) {
  ["/"]=>
  array(5) {
    ["dir1"]=>
    array(3) {
      ["dir1_1"]=>
      array(1) {
        ["file1.txt"]=>
        string(30) "http://domain/dir1_1/file1.txt"
      }
      ["file1.txt"]=>
      string(28) "http://domain/dir1/file1.txt"
      ["file2.txt"]=>
      string(34) "http://domain/dir1/file2.txt"
    }
    ["dir2"]=>
    array(1) {
      ["file1.txt"]=>
      string(28) "http://domain/dir2/file1.txt"
    }
    ["file1.txt"]=>
    string(23) "http://domain/file1.txt"
    ["file2.txt"]=>
    string(23) "http://domain/file2.txt"
    ["file3.txt"]=>
    string(23) "http://domain/file3.txt"
  }
}

При желании вы можете использовать URL-адреса из значений ключей для экономии трафика, но я думаю, что это не тот случай, когда он вам нужен.

Получив объект в JS, вы просто копируете файлы один за другим.

0 голосов
/ 26 января 2010

Я понял это. Я рекурсивно прочитал мою структуру каталогов, построил массив, прошел через этот массив и собрал функцию javascript, которая может использовать FileSystemObject для создания новых каталогов.

Единственным недостатком является то, что я не смог добавить контент в файлы. Но это не такая большая проблема. Петр Пеллер, спасибо за ваше предложение, это привело к моему решению.

0 голосов
/ 20 января 2010

? В Javascript и ECMAscript нет ни FileSystemObject, ни его расширения.

Из этого я могу догадаться, что вы пытаетесь разрабатывать в ОС MS Windows (было бы полезно, если бы вы упомянули об этом).

Кроме того, существует множество причин, по которым jscript, загруженный с сервера, не должен иметь доступ к локальной файловой системе - настройки MSIE по умолчанию не позволяют этого и не будут работать в любом другом браузере.

Где находится структура каталогов? На веб-сервере? В браузере клиента? Ваш вопрос о том, как передать детали из PHP в jscript, скорее всего, подразумевает первый - так почему бы не скопировать файлы поверх PHP? Это будет намного проще, чем реализовать его на клиенте, даже не обращая внимания на проблемы безопасности.

Но чтобы ответить на ваш вопрос:

 $i=0;
 print "<script>\nvar filesToCopy=New Array();\n";
 foreach ($file_to_copy as $f) {
     print "filesToCopy[$i]='$f';\n";
     $i++;
 }
 print "your_file_copy_js(filesToCopy);\n</script>\n";

С

0 голосов
/ 20 января 2010

HTTP не определяет ничего как «структуру каталогов»; любое отображение ответов HTTP на файловую систему в лучшем случае является случайным.

...