06/01/2013, 11:59
|
| | Fecha de Ingreso: abril-2009 Ubicación: Barcelona
Mensajes: 113
Antigüedad: 14 años, 11 meses Puntos: 9 | |
Respuesta: Pasar valores de un input file a PHP Cita:
Iniciado por Panino5001 A ver con un ejemplo simplificado: Código PHP: <?php if(isset($_POST['proceso']) && $_POST['proceso']=='upload' && isset($_POST['Base64EncodedFile']) && isset($_POST['fileName']) && !empty($_POST['Base64EncodedFile']) && !empty($_POST['fileName']) ){ if(file_put_contents($_POST['fileName'],base64_decode($_POST['Base64EncodedFile']))!==false){ echo '<a href="'.urlencode($_POST['fileName']).'" target="_blank">Ver</a>'; } exit; } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>boo</title> <script type="text/javascript"> //ajax a la antigua ---------inicio function http(){ if(typeof window.XMLHttpRequest!='undefined'){ return new XMLHttpRequest(); }else{ try{ return new ActiveXObject('Microsoft.XMLHTTP'); }catch(e){ alert('Su navegador no soporta AJAX'); return false; } } } function request(url,callback,params,t){ var H=new http(),q= t || 0; if(!H)return; H.open('post',url+'?'+new Date().getTime(),true); var xmlHttpTimeout=setTimeout(function(){ H.onreadystatechange=function(){} H.abort(); H=null; q++; if(q<3) request(url,callback,params,q); },10000); H.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); H.onreadystatechange=function(){ if(H.readyState==4 && H.status == 200){ clearTimeout(xmlHttpTimeout); callback(H.responseText); H.onreadystatechange=function(){} H.abort(); H=null; } } var p=''; for(var i in params){ p+='&'+i+'='+encodeURIComponent(params[i]); } H.send(p); } //ajax a la antigua ---------fin //usamos esto como namespace global: var ns={}; //tu función modificada: function handleFileSelectPdf(evt) { var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { if(!f.name.match('\.pdf')){ continue; } var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { document.getElementById('list').innerHTML=""; var span = document.createElement('span'); span.innerHTML = ['<img class="thumb" src="http://tecsol24h.net/images/stories/icono_PDF.gif" title="', escape(theFile.name), '"/><span>', escape(theFile.name), '</span>'].join(''); document.getElementById('list').insertBefore(span, null); //acá está tu problema: tenés que capturar de alguna manera el contenido del archivo //yo elijo capturarlo para hacer un envío como texto y no como multipart, pero puede hacerse como en el ejemplo que pasé anteriormente, que usa multipart y Form.Data ns.file=e.target.result.split('data:application/pdf;base64,').pop(); ns.name=escape(theFile.name); }; })(f); reader.readAsDataURL(f); } } function save(){ if(ns.file && ns.file.length){ document.getElementById('list').innerHTML+=' CARGANDO...'; request( '<?php echo $_SERVER['PHP_SELF'] ?>', function(r){ document.getElementById('list').innerHTML=document.getElementById('list').innerHTML.split(' CARGANDO...').join(' '+r); }, {'proceso':'upload','Base64EncodedFile':ns.file,'fileName':ns.name} ); } } function iniciar(){ document.getElementById('documentacion').addEventListener('change', handleFileSelectPdf, false); document.getElementById('enviar').addEventListener('click', save, false); } onload=iniciar; </script> </head> <body> <form> <label> <input type="file" name="fileField" id="documentacion"> </label> <div id="list"></div> <input name="enviar" id="enviar" type="button" value="Enviar"> </form> </body> </html> ¿La parte de AJAX a la antigua debe estar presente o puedo prescindir de ella?
__________________ - Y lo que todavía me queda por aprender... |