2012-06-15 33 views
5

Tengo el plugin jQuery File Upload trabajando en un sitio PHP.Plugin de carga de archivos jQuery: ¿Cómo subir a subcarpetas?

Me preguntaba si es posible tener los archivos cargados en una subcarpeta de nombre dinámico en lugar de ir todos a la misma carpeta de carga.

La razón es que necesito una carpeta separada para los archivos cargados en cada 'proyecto' que está creando el usuario en el sitio. P.ej. cuando un usuario crea un proyecto, todo lo que carga para ese proyecto entra en/uploads/{$ project_uid}/{$ file_name}

Espero haberme explicado correctamente y realmente agradecería que alguien pudiera ayudarme aquí afuera.

Gracias!

+3

¿Qué plugin estás usando? Uploadify? Si tiene control sobre la configuración de la ruta para cargar en JavaScript, debe poder cambiar esa ruta dinámicamente dependiendo de otras variables, por ejemplo, id del proyecto/nombre del archivo. – Benno

+3

No puede cargar directamente en cualquier carpeta que desee con php, supongo que todos van primero a una carpeta temporal general, y luego usan move_upload_file donde quiera. – Anonymous

+0

El complemento se llama carga de archivo jQuery, se puede encontrar aquí: http://blueimp.github.com/jQuery-File-Upload/ – user1378715

Respuesta

3

Firt, lo obvio deben establecerse: que no realidad puede establecer el destino de la carga con JavaScript/jQuery/jWhateverPlugin (es decir, desde el lado del cliente), por razones obvias de seguridad.

Pero puede pasar información junto con el motor del lado del servidor (en su caso, PHP), que puede usarlo para administrar el almacenamiento real de la carga.

Existen varios juegos de herramientas para ayudarlo, como el jQuery File Upload de blueimp con el que comenzó inicialmente, o Uploadify, que Benno promocionó por primera vez y pareció cumplir sus requisitos.

Así que lo que tiene que hacer es personalizar las secuencias de comandos del lado del servidor y del lado del servidor para implementar pasando las variables de directorio y usarlas para definir la ubicación de almacenamiento.

fuertemente basada en la Uploadify documentation, y el uso de la variable de project_uid, este whould aspecto:

En el lado del cliente (JavaScript + jQuery + Uploadify):

var project_uid; 
// populate project_uid according to your needs and implementation 
// befor using uploadify 

$('#file_upload').uploadify({ 
    'method'   : 'post', 

    // pass your variable to the server 
    'formData' : { 'project_uid' : project_uid }, 

    // optional "on success" callback 
    'onUploadSuccess' : function(file, data, response) { 
     alert('The file was saved to: ' + data); 
    } 
}); 

Y en el servidor -side (PHP + Uploadify):

// Set $someVar to 'someValue' 
$untrustedProjectUid = $_POST['project_uid']; 

// Remember to check heavily the untrusted received variable. 
// Let's pretend you checked it, it passe your tests, so you 
// initialized a trusted var with it 
$trustedProjectUid = ensureSecure($untrustedProjectUid); 

$targetFolder = '/uploads/' . $trustedProjectUid . '/' ; // Relative to the root 


if (!empty($_FILES)) { 
    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; 
    $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name']; 

    // Validate the file type 
    $fileTypes = array('jpg','jpeg','gif','png'); // Put you allowed file extensions here 
    $fileParts = pathinfo($_FILES['Filedata']['name']); 

    if (in_array($fileParts['extension'],$fileTypes)) { 
     move_uploaded_file($tempFile,$targetFile); 
     echo $targetFolder . '/' . $_FILES['Filedata']['name']; 
    } else { 
     echo 'Invalid file type.'; 
    } 
}  
Cuestiones relacionadas