subir precarga mostrar formdata example con como archivos php ajax file upload progress

php - precarga - upload file ajax jquery



carga de archivo ajax php sin iFrame o flash engine (1)

No estoy seguro de que sea su problema, pero de todos modos debe asegurarse de que su servidor permita cargar archivos suficientemente grandes y pueda manejarlos sin agotar el tiempo de espera.

Puede configurar esto en código o php.ini (ejemplo en el código :)

ini_set(''memory_limit'', ''96M''); ini_set(''post_max_size'', ''64M''); ini_set(''upload_max_filesize'', ''64M'');

Luego, asegúrese de que su servidor no excede el tiempo de espera:

$seconds=120; set_time_limit ( $seconds );

Todo este código está en la parte superior de tu archivo PHP.

Simplifiqué mi código para cargar un archivo sin iFrame o flash engine, y llegué a esta función ajax:

<input type="file" name="uploadfile" id="myfile" /><label for="file" id="progress"></label> <script src="js/jquery-1.7.1.min.js"></script> <script> function uploadFile(files) { var xmlhttp; if(window.XMLHttpRequest) xmlhttp = new XMLHttpRequest(); else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.upload.onprogress = function(e) { $("#progress").empty().append(e.loaded + " - " + e.total); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { alert(xmlhttp.responseText + "DONE!"); } } xmlhttp.open("post", "post.php", true); xmlhttp.setRequestHeader("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT"); xmlhttp.setRequestHeader("Cache-Control", "no-cache"); xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xmlhttp.setRequestHeader("X-File-Name", files[0].fileName); xmlhttp.setRequestHeader("Content-Type", "multipart/form-data"); xmlhttp.send(files[0]); } $(document).ready(function() { $("#myfile").change(function() { uploadFile(this.files); }); }); </script>

Este es el código php que responde a la función ajax:

<?php if(isset( $_SERVER[''CONTENT_TYPE''], $_SERVER[''CONTENT_LENGTH''], $_SERVER[''HTTP_X_FILE_NAME''] ) && $_SERVER[''CONTENT_TYPE''] == ''multipart/form-data''){ $file->name = basename($_SERVER[''HTTP_X_FILE_NAME'']); $input = fopen(''php://input'', ''rb''); $file = fopen(''files/''.$file->name, ''wb''); stream_copy_to_stream($input, $file); fclose($input); fclose($file); } else { echo "Error"; } ?>

El problema es que, a veces funciona, a veces se produce un error al intentar cargar el mismo archivo. Espero que haya una solución para solucionar este problema. El código es simple, cuando elijo un archivo con tipo de archivo de entrada, se ejecuta la función uploadFile. Cuando se produce un error, puedo ver que el archivo comienza a cargarse pero no tiene el tamaño original, por lo que podría fallar y dejar de cargar.

¡Gracias de antemano, Daniel!