2010-10-24 29 views
7

¿Es posible cargar una carpeta con el navegador?¿Cómo subir una carpeta con PHP?

Busco en Google y descubro que esto es una limitación del navegador y que debo usar Java Applet o Flash.

¿Hay alguna manera de cargar la carpeta con Flash? No puedo obtener ninguna pista sobre esto. ¿Hay alguna forma de obtener solo la ruta de la carpeta con el navegador?

Respuesta

3

Ver swfupload - Forma basada en flash para cargar más de un archivo a la vez. De todos modos, no es posible cargar una carpeta, solo puedes cargar todos los archivos de la carpeta.

1

Es posible cargar varios archivos a la vez, arrastrando y soltando, sin ningún complemento del navegador. Este es un nuevo desarrollo con HTML5 y javascript, por lo que probablemente necesites una alternativa para los navegadores más antiguos.

Se llama "HTML5 drag and drop". Todavía no lo he usado, así que no puedo darle un código de muestra, pero buscar esa frase, y leer el artículo vinculado del blog de Mozilla puede darle algunos consejos.

14

Se está haciendo posible con el uso de webkitdirectory.

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

Aunque todavía no parece ser compatible con otros navegadores.

+1

'webkitdirectory' funciona en Chrome 16 –

+0

' multiple' no funciona con 'webkitdirectory' o' directory' –

5

Por favor intenta esto para cargar la carpeta:

<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

¿Cómo se obtienen las carpetas en el servidor? Como parece, cargará todos los archivos dentro de la carpeta sin información sobre la estructura de la carpeta/subcarpetas. Por favor recomiende. –

0

Puede archivar el directorio con algo como tar y luego subirlo como uno archivo. Pero tenga cuidado, puede superar el máximo de carga de php, que está configurado de forma predeterminada en 2 MB. Esto es configurable sin embargo.

0

para cargar la carpeta en php, utilice estos pasos

<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

No parece posible cargar una carpeta utilizando sólo PHP, pero puede detectar Javascript carpetas para lo solucioné haciendo estos dos pasos:

  1. Crea una función de Javascript que lea el directorio y los archivos que se cargarán y agrégalo a una matriz (llamé a esta estructura de archivos) que se enviará junto con POST. Por ejemplo:

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

hay una función similar en Dropzone.js que ya se encarga de esto que tuve que modificar (_addFilesFromDirectory()). Pero puedes crear tu propia función para hacer esto. Consulte esto https://stackoverflow.com/a/20431117/6760554 si necesita más ayuda con respecto a esto.

  1. En Php, primero debe dejar que sus archivos se carguen en una determinada carpeta donde se almacenarán temporalmente. Una vez cargados tus archivos, debes pasar tu matriz de javascript a tu phpcode. Allí necesita iterar la matriz y crear las carpetas y luego mover los archivos cargados de la carpeta temporal a su ubicación respectiva. Por ejemplo:

    $_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); 
         } 
    
        } 
    } 
    

espero que esto ayude.

Cuestiones relacionadas