Bueno, pues mi intento es el siguiente:
Subida "casi" por ajax
Yo utilizo las librerias de ajax de
MooTools. El caso es que me envia los datos por el formulario y luego al terminar hago una llamada de ajax para que en el responseText me devuelva la imagen, pero claro, devuelve texto XD no la imagen, es decir, una tira de simbolos ascii.
Como no me ha funcionado eso, he probado simplemente a llamar mediante el metodo setProperty() (de Mootools) para poner el src de la imagen a mi archivo mostrar_ajax.php que es el que contiene las sesiones. Y en efecto muestra la imagen, pero solo para la primera vez y alguna vez la segunda. El caso es que se envia, porque si accedo directamente, esta la ultima imagen subida. Por eso he supuesto que se quedaba en cache y he enviado los header para que no guardaran la imagen en cache, pero aun asi seguia sin funcionar.
Bueno hay va el codigo(necesitais la libreria de MooTools, podeis cogerla de mi server, esta linkada en el archivo siguiente):
upload_ajax.php
Código:
<script type="text/javascript" src="javascripts/mootools.v1.1.js"></script>
<script type="text/javascript">
function ajax()
{
//$('resultado').setHTML('<img src="images/loading.gif" alt="loading..."/>Cargando ...')
$('imgaux').setProperty('src','mostrar_ajax.php') //Libreria MooTools
/*new Ajax('mostrar_ajax.php', //Libreria MooTools ==>Me da texto binario en resultado
{
update: $('resultado'),
evalscripts: true
}).request()
*/
}
function enviar(f)
{
//Guardar action y target original
actionActual = f.form.action;
targetActual = f.form.target;
//Modificar action y target original
f.form.action = "procesar_ajax.php";
f.form.target = "aux";
f.form.submit();//Enviar formulario
//Restaurar action y target original
f.form.action = actionActual;
f.form.target = targetActual;
ajax()
}
</script>
<form method="post" enctype="multipart/form-data">
<input name="archivo" type="file" onChange="enviar(this)" ><br>
</form>
<div id='resultado'></div><img id="imgaux" src="images/anonimo.gif">
<iframe src="" name="aux" style="display:none;"></iframe>
Tambien he tenido que utilizar el dichoso iframe oculto (como en tu ejemplo), no habria alguna manera de eliminarlo?
procesar_ajax.php
Código:
<?
session_start();
list($anchura, $altura, $tipoImagen, $atributos)=getimagesize($_FILES["archivo"]["tmp_name"]);
$los_tipos = array("gif", "jpg", "png");
$tipo ="image/".$los_tipos[$tipoImagen - 1];
$datos_imagen = fread(fopen($_FILES["archivo"]["tmp_name"], "rb"), filesize($_FILES["archivo"]["tmp_name"]));
$_SESSION["cont"] = $datos_imagen;
$_SESSION["tipo"] = $tipo;
?>
mostrar_ajax.php
Código:
<?php
session_start();
$url = $_SESSION["cont"];
$tip = $_SESSION["tipo"];
$naleatorio=mt_rand(0,1000000);//Numero aleatorio para el nombre de la imagen
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Content-type: $tip");
header('Content-Disposition: inline; filename="'.$naleatorio.'.$tip"');
echo $url;
session_destroy();
?>
Bueno echale un vistazo y ya me diras ;)
PD:Cuando dijiste que te llevaria un tiempo hacer el ejemplo de ajax, crei que seria un dia o dos...pero no 3 horas!! Eres un maquina ;)