Невозможно загрузить папку, используя только PHP, но Javascript может обнаруживать папки, поэтому я решил это, выполнив следующие два шага:
Создайте функцию Javascript, которая читаеткаталог и файлы, которые будут загружены и добавьте это в массив (я назвал это Файловая структура), который будет отправлен вместе с 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);
}
}
}
Надеюсь, это поможет.