Ver Mensaje Individual
  #7 (permalink)  
Antiguo 27/07/2011, 12:39
Avatar de Escain
Escain
 
Fecha de Ingreso: enero-2007
Mensajes: 21
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: AJAX, al descargar binario, los caracteres 127+ se evalúan en 65533

El problema de codificar antes de enviar es que el contenido ocupa bastante más, sin contar la carga para el servidor de leer y generar el contenido codificado. Por supuesto se podrían guardar los archivos ya codificados.

He hecho un cargador de imágenes ajax, simplemente para comprobar la transmisión de los archivos. Os paso el código aquí:

Código:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>example</title>
</head>

<body>
<script type="text/javascript">
var Http;
var http;
function Solicitudes( ){
		// Obtencion de la funcion de creacion de httpRequest.
		var factories = [
			function() { return new XMLHttpRequest();},
			function() { return new ActiveXObject( "Msxml2.XMLHTTP");},
			function() { return new ActiveXObject( "Microsoft.XMLHTTP");}
		];
		Http = null;
		for( var i = 0; i < factories.length; i++ ){
			try{
				var request = factories[i]();
				if(request != null ){
					Http = factories[i];
				}
				delete request;
			}
			catch(e){
				continue;
			}
		}
		
		
		http = Http();
		http.onreadystatechange = callbacksend;
		http.open("get", "logoEscainX.png", true);
		http.overrideMimeType('text/plain; charset=x-user-defined');
		http.setRequestHeader("accept-charset", "iso-8859-1");
		http.send(null);
};

function callbacksend(){
	if(http.readyState == 4){
		if(http.status == 200){
			var sol=http.responseText.split("");
			for( var i=0; i < http.responseText.length; i++){
				sol[i]=String.fromCharCode(sol[i].charCodeAt(0) & 0xff);
			}
			
			var img = document.createElement("img");
			document.body.appendChild(img);
			img.src = "data:image/gif;base64," + btoa(sol.join(""));
		}
	}
}
Solicitudes( );

</script>
</body>
</html>
El resultado es bastante mediocre, solo sirve para imágenes realmente pequeñas: A partir de 100k de imágene empieza a tardar bastante.
Aunque como curiosidad no esta mal, que pena que haya que hacer el recorte byte por byte, es lo que toma tanto tiempo.