Umn, subir los ficheros con Ajax no. Pero si una vez enviados, los tenemos en la sesion de php, podemos hacer una llamada de ajax a otro archivo que nos muestre el contenido de la sesion, el la id del div que queramos (y asi ahorramos el iframe ocultos o iframes normales).
Estoy haciendo pruebas con tu codigo pero no se si hare algo mal.
He hecho 3 archivos.
-origen.php
-enviar.php
-recibir.php
El archivo de origen es el que tiene el formulario que enviara los datos al archivo enviar y este almacenara el archivo en la sesión. Luego el archivo recibir es el que muestra el archivo que contiene la sesión.
El caso es que me actualiza mal el iframe y al principio me muestra la url del iframe (porque...no lo se XD).
Aqui esta el codigo:
origen.php
Código:
<script type="text/javascript">
function checkear(f) {
function no_prever() {
alert("El fichero seleccionado no es válido...");
//limpiar();
}
function prever() {
//Guardar action y target original
actionActual = f.form.action;
targetActual = f.form.target;
//Modificar action y target original
f.form.action = "enviar.php";
f.form.target = "ver";
f.form.submit();//Enviar formulario
//Restaurar action y target original
f.form.action = actionActual;
f.form.target = targetActual;
}
//Si tiene los formatos adecuados
(/\.(gif|jpg|png)$/i.test(f.value)) ? prever() : no_prever();
}
</script>
Pagina original:<br />
<br>
Subir archivo de tu pc:<br>
<form action="" method="post" enctype="multipart/form-data">
<input id="pc_imagen" name="archivo" type="file" size="25" onChange="checkear(this)" ><br>
<iframe src="recibir.php" id="ver" name="ver"></iframe>
</form>
enviar.php
Código:
<?php
session_start();
$defecto = "webmaster.gif";
$Ok = isset($_FILES["archivo"]);
$url = ($Ok) ? $_FILES["archivo"]["tmp_name"] : $defecto;
list($anchura, $altura, $tipoImagen, $atributos) = getimagesize($url);
$error = (isset($atributos)) ? 0 : 1;
$los_tipos = array("gif", "jpg", "png");
$tipo = ($Ok) ? "image/".$los_tipos[$tipoImagen - 1] : "image/gif";
$fichero = ($Ok && ($error == 0)) ? $_FILES["archivo"]["name"] : $defecto;
$onload = ($Ok) ? "onload='parent.datosImagen($tam, $ancho, $alto, $error)'": '';
$datos_imagen = fread(fopen($datos, "rb"), filesize($datos));
$_SESSION["cont"] = $datos_imagen;
$_SESSION["tipo"] = ($error == 0) ? $tipo : "image/gif";
?>
<html>
<head>
<style type="text/css" >
html {
margin: 0;
height: 100%;
}
body {
height: 100%;
background-image: url(previendo.php?dato=<?=$fichero;?>);
background-repeat: no-repeat;
background-position: center center;
}
</style>
</head>
<body <?=$onload;?>>
</body>
</html>
recibir.php
Código:
<?php
session_start();
$url = ($_SESSION["cont"] == "")
? fread(fopen("webmaster.gif", "rb"), filesize("webmaster.gif"))
: $_SESSION["cont"];
$tip = ($_SESSION["tipo"] == "")
? "image/gif"
: $_SESSION["tipo"];
header("Content-type: $tip");
echo $url;
session_destroy();
?>
Cual el es el error?
PD: Cuando arreglemos esto, luego podiamos intentar enviar con ajax una peticion al archivo recibir.php tras haber enviado el formulario y que nos devuelva el contenido en un div.