Это не представляется возможным, чтобы загрузить папку, используя только PHP, но Javascript может обнаружить папки, так что я решил его, выполнив эти два шага:
Создайте функцию Javascript, которая читает каталог и файлы, которые будут загружены, и добавьте это в массив (я назвал это Filestructure), который будет отправлен вместе с POST. Например:
{
'foldername/': {'file1.txt','file2.txt},
'foldername/folder2': {'foo.txt', 'bar.png'}
}
Существует аналогичная функция в Dropzone.js, что уже обрабатывает это, что я должен изменить (_addFilesFromDirectory()). Но вы можете создать свою собственную функцию для этого. См. Это https://stackoverflow.com/a/20431117/6760554, если вам нужна дополнительная помощь по этому вопросу.
В Php вы должны сначала отправить свои файлы в определенную папку, где они будут храниться временно. После того, как ваши файлы были загружены, вам необходимо передать свой массив javascript на ваш phpcode. Там вам нужно перебрать массив и создать папки, а затем переместить загруженные файлы из временной папки в соответствующее место. Например:
$_filetree = $_POST['filetree'];
function createFoldersAndMoveFiles($_filetree)
{
$nFolders = count($_filetree);
foreach ($_filetree as $folder => $files) {
createFolder($folder);
moveFiles($files, $folder);
}
}
function moveFiles($_files, $_folder) {
$source = 'tmpuploads/';
$destination = 'mypath/';
$nFiles = count($_files);
for($i = 0; $i < $nFiles; $i++) {
$file = $_files[$i];
rename($source . $file, $destination .$_folder. '/' .$file);
}
}
function createFolder($foldername) {
$folders = explode("/", $foldername);
$path = 'mypath/';
$nFolders = count($folders);
for($i = 0; $i < $nFolders; $i++){
$newFolder = '/' . $folders[$i];
$path .= $newFolder;
if (!file_exists($path) && !is_dir($path)) {
mkdir($path);
}
}
}
Я надеюсь, что это помогает.
'webkitdirectory' работает в Chrome 16 –
' multiple' не работает с 'webkitdirectory' или' directory' –