Siempre recordemos que no se puede subir archivos usando AJAX, porque el objeto ajax no soporta el enctype requerido para subir archivos asi que se usa un iframe para emular el proceso. Voy a explicar como hacer esto con jquery y ajax

El formulario para subir archivos

1
2
3
4
5
6
7
8
9
<form action="upload.php" id="frm_uploader" name="frm_uploader" method="post" enctype="multipart/form-data">
<ol>
    <li><label>Name:</label><input type="text" id="cfname" name="fname" size="30" class="required" /></li>
        <li><label>E-mail:</label><input type="text" id="cfemail" name="femail" size="30" class="required email" /></li>
    <li><label>Select Files</label><input name="ffoto[]" type="file" class="multi" accept="gif|jpg|jpeg|png|pdf|zip|rar|ai|eps|mp3|avi|wmv|mpg|mpeg|cdr" /></li>
        <li><p align="center"><input type="submit" name="submit" value="Upload Now" class="btn" /></p></li>
</ol>
</fieldset>
</form>

AJAX Jquery

Incluimos las librerias javascript, el script automaticamente buscará el campo con la clase multi

1
2
<script language="javascript" src="js/jquery-1.31.js"></script>
<script language="javascript" src="js/jquery.MultiFile.pack.js"></script>

PHP para recibir los archivos

Este script permite subir multiples archivos como un array, asi que empezemos por ahi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
    $cuales="";
     /// Vemos cuantos archivos hemos subido
    $nro=count($_FILES["ffoto"]["name"]);
    /// Empezamos el array
    for ($i=1; $i<$nro; $i++) {
    $file_name=$_FILES["ffoto"]["name"][$i];
    $file_size=$_FILES["ffoto"]["size"][$i];
    $file_type=$_FILES["ffoto"]["type"][$i];
    if($file_name!=""){
        // verifica carpeta
        $nombre_archivo=$_POST['femail'];
        if (!file_exists('userfiles'.$nombre_archivo)) {
            mkdir('userfiles/'.$nombre_archivo,0777);
        }
        $path="userfiles/".$nombre_archivo;    
        // sube archivo
        copy($_FILES["ffoto"]['tmp_name'][$i], $path.'/'.$file_name) ;
        echo '<p align="center">Your file <b>'.$file_name.'</b> was successfully uploaded</p>';
        $cuales.=$file_name." ";
    } else {
        echo '<br><br><p align="center"><b>Error with '.$file_name.'</b></p>';
    }

Puedes decargar este plugin jquery y ver mas ejemplos desde la pagina de su creador