Ver Mensaje Individual
  #16 (permalink)  
Antiguo 06/01/2013, 11:59
navegantes
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 113
Antigüedad: 15 años, 7 meses
Puntos: 9
Respuesta: Pasar valores de un input file a PHP

Cita:
Iniciado por Panino5001 Ver Mensaje
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...