ActionScript 3.0: Subir archivos con FileReference y PHP
La clase File Reference de AS3 es bastante parecida a la de AS2. Además el ejemplo de la ayuda de Flash es bastante sencillo de entender.El código que pongo a continuación esta hecho a partir de dicho ejemplo, al que he añadido algunos comentarios para explicarlo. Para utilizarlo Hay que tener en el escenario un boton llamado «Examinar_bt» y un campo de texto dinámico llamado «Estado_txt».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
//Clases necesarias import flash.events.*; import flash.net.FileFilter; import flash.net.FileReference; import flash.net.URLRequest; //Dirección del PHP que va a subir el archivo var uploadURL:URLRequest; var archivo:FileReference; //Función llamada al pulsar examinar, se crea el filereference y se abre el navegador de archivos function Examinar(event:MouseEvent) { Estado_txt.appendText("n" + "Vamos a seleccionar el archivo."); uploadURL = new URLRequest(); uploadURL.url = "uploadFile.php"; archivo = new FileReference(); PonerListeners(archivo); archivo.browse(getTypes()); } //Añado los listener al objeto filereference function PonerListeners(dispatcher:IEventDispatcher) { dispatcher.addEventListener(Event.CANCEL, cancelHandler); dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(Event.SELECT, selectHandler); dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler); } //Con está función se generan los tipos de archivos que estarán disponibles para seleccionar desde el navegador function getTypes():Array { var allTypes:Array = new Array(getImageTypeFilter(), getTextTypeFilter()); return allTypes; } //Tipos de imágenes admitidos, tanto para pc como para mac function getImageTypeFilter():FileFilter { return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png"); } //Tipos de archivos de texto admitidos, para pc y mac function getTextTypeFilter():FileFilter { return new FileFilter("Text Files (*.txt, *.rtf)","*.txt;*.rtf"); } //Se distribuye cuando se cancela la descarga desde el navegador de archivos. function cancelHandler(event:Event):void { Estado_txt.appendText("n" + "Subida cancelada."); } //Se distribuye cuando se finaliza la descarga o la carga function completeHandler(event:Event):void { Estado_txt.appendText("n" + "Subida completada."); } //Se reciben datos del servidor tras completar la carga function uploadCompleteDataHandler(event:Event):void { Estado_txt.appendText("n" + "Subida confirmada por el servidor."); } //Se produce cuando falla la carga y hay un código http de error. //Por ejemplo si no se encuentra el PHP, se generará un error 404. function httpStatusHandler(event:HTTPStatusEvent):void { Estado_txt.appendText("n" + "Se ha producido el siguiente error: " + event.status); } //Se produce cuando falla la carga o descarga function ioErrorHandler(event:IOErrorEvent):void { Estado_txt.appendText("n" + event.text); } //Se inicia la carga o descarga function openHandler(event:Event):void { Estado_txt.appendText("nComienza la subida"); } //Se distribuye periodicamente durante la carga o la descarga, mostrando el progreso de la misma. function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); Estado_txt.appendText("n" + event.bytesLoaded + " bytes de " + event.bytesTotal + " bytes subidos."); } //Se distribuye al intentar descargar o cargar un archivo de un servidor fuera del entorno de seguridad de la película function securityErrorHandler(event:SecurityErrorEvent):void { Estado_txt.appendText("nEl servidor no permitió la carga del archivo."); } //Se distribuye al elegir el archivo para carga o descarga desde el navegador de archivos. function selectHandler(event:Event):void { Estado_txt.text = ""; var archivo:FileReference = FileReference(event.target); Estado_txt.appendText("n" + "Archivo elegido: " + archivo.name + "n" + "Tamaño = " + archivo.size + " bytes."); if(archivo.size > 20000){ Estado_txt.appendText("nNo se pueden subir archivos de más de 20 KB."); }else{ archivo.upload(uploadURL); } } Examinar_bt.addEventListener(MouseEvent.CLICK,Examinar); |
Y los archivos fuente:
Descargar fuentes