Tengo un script de carga de archivos Flex que utiliza URLRequest para cargar archivos en un servidor. Quiero agregar soporte para la autenticación http (directorios protegidos con contraseña en el servidor), pero no sé cómo implementar esto, supongo que necesito extender la clase de alguna manera, pero sobre cómo estoy un poco perdido.Flex 3: cómo admitir la autenticación HTTP URLRequest?
Intenté modificar lo siguiente (reemplazando HTTPService con URLRequest), pero eso no funcionó.
private function authAndSend(service:HTTPService):void{
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}
Debo señalar que no estoy bien informado cuando se trata de ActionScript/Flex, aunque he logrado modificar satisfactoriamente el script de carga un poco.
[Editar] - aquí es una actualización de mi progreso, basado en la respuesta a continuación, aunque todavía no puedo conseguir que esto funcione:
Gracias por su ayuda. Intenté implementar tu código, pero no tuve suerte.
El comportamiento general que estoy experimentando al tratar con ubicaciones autenticadas HTTP es que con IE7 todo está bien, pero en Firefox cuando intento subir un archivo al servidor muestra un mensaje de autenticación HTTP, que incluso si se da el correcto detalles, simplemente detiene el proceso de carga.
Creo que la razón por la cual IE7 está bien es por la información de sesión/autenticación compartida por el navegador y el componente Flash; sin embargo, en Firefox este no es el caso y experimento el comportamiento anterior.
Aquí es mi función de carga actualizada, incorporando los cambios:
private function pergress():void
{
if (fileCollection.length == 0)
{
var urlString:String = "upload_process.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&filetotal="+fileTotal;
if (ExternalInterface.available)
{
ExternalInterface.call("uploadComplete", urlString);
}
}
if (fileCollection.length > 0)
{
fileTotal++;
var urlRequest:URLRequest = new URLRequest("upload_file.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&obfuscate="+obfuscateHash+"&sessidpass="+sessionPass);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = new URLVariables("name=Bryn+Jones");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("testuser:testpass");
var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
urlRequest.requestHeaders.push(credsHeader);
file = FileReference(fileCollection.getItemAt(0));
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
file.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
file.upload(urlRequest);
}
}
Como se mencionó anteriormente, que parecen estar experimentando los mismos resultados con o sin las enmiendas a mi función.
¿Puedo preguntar también dónde se debe ubicar crossdomain.xml, ya que actualmente no tengo uno y no estoy seguro de dónde ubicarlo?
crossdomain.xml debe ser colocado en el directorio raíz de la aplicación web. Por lo tanto, si los archivos que comprenden www.yoursite.com se encuentran en D: \ websites \ yoursite.com, la ruta del archivo debe ser d: \ sites \ yoursite.com \ crossdomain.xml. –
Además de colocar su archivo corssdomain.xml (lo cual debe hacer), ¿sabe qué versión de Flash Player tiene instalada? ¿Te aseguraste de estar usando Flash Player 10? (Parece que mis resultados fueron que Flash Player 9 no juega bien con los encabezados de Autorización personalizados.) –
Gracias por su ayuda Christian - lamentablemente, no he tenido la oportunidad de realizar más pruebas (se han visto inundadas con otro proyecto) pero intentaré uno, tengo la oportunidad. – BrynJ