06/01/2013, 11:59
|
| | 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 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... |