2010-10-24 3 views
7

Возможно ли загрузить папку с браузером?Как загрузить папку с PHP?

Я ищу в Google и узнаю, что это ограничение браузера и что я должен использовать Java-апплет или Flash.

Есть ли способ загрузить папку с помощью Flash? Я не могу понять это. Есть ли способ получить только путь к папке с браузером?

ответ

3

См. swfupload - Flash-способ загрузки нескольких файлов одновременно. В любом случае, невозможно загрузить папку, вы можете загружать только все файлы из папки.

1

Можно загружать несколько файлов за раз, перетаскивая их, без каких-либо плагинов для браузера. Это новая разработка с HTML5 и javascript, поэтому вам, вероятно, понадобится резерв для старых браузеров.

Это называется «HTML5 drag and drop». Я еще не использовал его, поэтому я не могу дать вам образец кода, но поиск этой фразы и чтение связанной статьи в блоге Mozilla могут дать вам несколько указателей.

14

Это возможно с использованием webkitdirectory.

<input type="file" webkitdirectory directory multiple /> 

Хотя он пока не поддерживается другими браузерами.

+1

'webkitdirectory' работает в Chrome 16 –

+0

' multiple' не работает с 'webkitdirectory' или' directory' –

5

Пожалуйста Попробуйте это для загрузки папку:

<form method="post" enctype="multipart/form-data"> 
 
    <input type="file" name="files[]" id="files" multiple="" directory="" webkitdirectory="" mozdirectory=""> 
 
    <input class="button" type="submit" value="Upload" /> 
 
</form>
`

$count = 0; 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    foreach ($_FILES['files']['name'] as $i => $name) { 
     if (strlen($_FILES['files']['name'][$i]) > 1) { 
      if (move_uploaded_file($_FILES['files']['tmp_name'][$i], 'folder/'.$name)) { 
       $count++; 
      } 
     } 
    } 
} 

`

+0

Как получить папки на сервере? Похоже, что он загрузит все файлы внутри папки без информации о структуре папок/подпапках. Пожалуйста, предложите. –

0

Вы можете заархивировать каталог с чем-то вроде tar, а затем загрузить его в качестве одного файл. Но будьте осторожны, вы можете превысить php upload max, который по умолчанию установлен на 2MB. Однако это настраивается.

0

загрузить папку в PHP, используйте следующие шаги

<form id="form1" action="myCurrent.php" method="post"> 
<label>Upload All Files From Folder</label> <br/> 
<input id="input" name="input[]" type="file" multiple webkitdirectory > 
<div id="errorBlock" class="help-block"></div> <br/> 

<input type="submit" name="btnDesFolder" id="btnDesFolder" value="send file" /> 
</form> 

<?php 
if(isset($_POST['btnDesFolder'])){ 
    $myFiles = $_POST['input-folder-2']; 

    if(isset($_POST['input-folder-2'])){ 
     $files = scandir("path/to/your/folder"); 
     $oldfolder = "path/to/your/folder/"; 

     $newfolder = "path/to/new/folder"; 

     foreach($files as $fname) { 
      if($fname != '.' && $fname != '..' && $fname != 'index.php') { 
       rename($oldfolder.$fname, $newfolder.$fname); 
      } 
     } 
    } 
} 
?> 
0

Это не представляется возможным, чтобы загрузить папку, используя только PHP, но Javascript может обнаружить папки, так что я решил его, выполнив эти два шага:

  1. Создайте функцию Javascript, которая читает каталог и файлы, которые будут загружены, и добавьте это в массив (я назвал это Filestructure), который будет отправлен вместе с POST. Например:

    { 
        'foldername/': {'file1.txt','file2.txt}, 
        'foldername/folder2': {'foo.txt', 'bar.png'} 
    } 
    

Существует аналогичная функция в Dropzone.js, что уже обрабатывает это, что я должен изменить (_addFilesFromDirectory()). Но вы можете создать свою собственную функцию для этого. См. Это https://stackoverflow.com/a/20431117/6760554, если вам нужна дополнительная помощь по этому вопросу.

  1. В 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); 
         } 
    
        } 
    } 
    

Я надеюсь, что это помогает.

Смежные вопросы