ActionScript 3.0: Subir archivos con FileReference y PHP

ActionScript 3.0: Subir archivos con FileReference y PHP

Etiquetas: FileFilter FileReference URLRequest browse upload

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

Descargar archivos

Comentarios
    • Autor
    • Jovix
    Muy bueno y claro el articulo. Utilice el script en un formulario que estoy haciendo en Flash, funciona bien el AS, pero cuando carga el archivo me da el siguiente error: "Se ha producido el siguiente error: 404 - Error #2038" Sospecho que el problema esta en los paths, tanto del que define el directorio de carga en el php, como el que esta en el AS y busca al php. El path que define el directorio en el php, ¿es relativo al php mismo o al html donde esta el flash? Yo lo puse relativo al php. Lo mismo con el AS, el path al php, ¿es relativo al html donde esta embebido el swf? Al directorio que cree para subir los archivos les di todos los permisos como para no errarle. Gracias por la dedicacion!
    • Autor
    • Jovix
    Ya solucione lo del path, ahora funciona perfectamente, habia puesto mal el path al php del AS, era relativo al swf como debia estar. Una inquietud, hay alguna forma de que el scroll de Estado_txt (... bueno me olvidaba, en vez de usar un texto dinamico utilice un textarea), permanezca siempre abajo, es decir, alguna manera de forzarlo a que siempre muestre la ultima linea. Sucede que cuando va cargando el archivo, los textos que va mostrando salen del cuadro y se quedan abajo, entonces hay que mover la barra de scroll para verlos. Por lo pronto muchas gracias, me fue de suma utilidad el articulo.
    • Autor
    • esedeerre

    Hola Jovix

    Lo suyo es que hagas una función "ponerTexto" en la que centralices los mensajes, y en esa función hacer los apaños necesarios para que el texto se mueva como quieras.

    • Autor
    • Make Pixels
    A mi me funciono pero hay dos cosas que me dar problema, 1 como hago para ver la foto subida en un fl.conteiner ILoader hay imagenes que tiene carateres esoerciales como niño.jpg que dan error como hago para reparar? la imagen me aparece asi cajaimg.source="caras/"+archivo.name; pero no siempre fuciona GRacias por tu ayuda!
    • Autor
    • esedeerre

    @Make Pixels

    La imagen se sube bien aunque tenga caracteres especiales, el "problema" viene luego. Yo te recomiendo que al subir la imagen la renombres en php y luego devuelvas el nueva nombre o id al flash.

    • Autor
    • Cristian
    Hola a todos.. estoy utilizando este codigo, pero tengo varios problemas que no se como resolverlos. Haber si alguien me ayuda.. 1. Necesito pasar desde AS el nombre por el cual voy a remplazar la imagen. por ejemplo si la imagen se llama abc y desde AS mando hola, como recibo hola en php para poder reemplazar por abc. 2. Como devuelvo el nuevo nombre a AS como esedeerre sugiere en el ultimo comment.
    • Autor
    • Renata
    Hola, estoy haciendo un ejemplo similar solo que quiero almacenar una imagen a mysql via php, he encontrado ejemplos en php donde lo hacen tomando el path del archivo seleccionado y quisiera saber si se podria usando flash, ojala me puedan ayudar o facilitar algun tutorial. De antemano gracias a todos
    • Autor
    • Michel
    Mira Renata una solución a lo que quieres hacer es guardar el path de la imagen en el directorio donde has subido la imagen en una base de datos (puede ser mysql), así como el nombre y algún otro dato que desees de la imagen, y luego para visualizar solo tienes que hacer una consulta a la base de datos con el path guardado y con eso basta...espero que te sirva el comentario.
    • Autor
    • willy
    MUCHAS GRACIAS POR EL CODIGO... me iluminaste el dia ahora la pregunta del millon es como hago para mostrar la imagen cargada dentro de un movie... la idea es poder hacer qe el usuario personalize una postal y pueda subr su foto y que luego la podra ver en el movie junto a un mensaje te agradesco de antemano por tu ayuda!!
    • Autor
    • vero
    hola mm soy nueva en esto y cree una web en flash cs4 as3, quiero agregar un boton o un enlace para que los que visiten la pagina puedan descargar documentos en word, pdf o en ppt, cheque un codigo que tenian aqui, pero me aparece packeges cannot be nested, y copie el codigo directo de aqui. necesito ayuda porfas, estoy bien verde en esto.les agradeceria mucho su ayuda
    • Autor
    • vero
    este es el codigo que use, package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; import flash.net.FileFilter; public class FileReference_download extends Sprite { private var downloadURL:URLRequest; private var fileName:String="Tiempo_de_Renovacion.pps"; private var file:FileReference; public function FileReference_download() { downloadURL = new URLRequest(); downloadURL.url="http://www.[parroquiasanjoseapo].com/Tiempo_de_Renovacion.pps"; file = new FileReference(); configureListeners(file); file.download(downloadURL, fileName); } } } descarga_btn.addEventListener(MouseEvent.CLICK,descarga);
    • Autor
    • Lucas
    Excelente, muchisimas gracias!!!
    • Autor
    • Ladymac
    Hola gente, necesito a quien pueda ayudar porque me meti a hacer algo que ahora se me esta re complicando, el codigo que esta publicado es excelente (gracias!!!!) y ya me resolvio una parte de lo que tenia que hacer, pero ahora no encuentro la manera de hacer visible la imagen porque se me carga sola una vez que la tengo en el servidor, pido que me ayuden si pueden cualquier comentario me sera util. Necesito que la imagen me aparezca cuando termine de cargar para que el usuario la pueda modificar y poner en un area determinada. Gracias a todos, saludos
    • Autor
    • darksoul
    Hola chicos, soy muy nuevo en esto y de antemano quiero agradecer por el aporte de este tutorial. sinembargo tengo algunas dudas. pues quiero meter todo ese codigo en un .as para ser usado como una clase, pero cuando lo importo en el fla no pasa nada. alguna idea de como puedo convertir bien eso a una clase y usarla para cualquier poryecto importandola desde el fla? gracias.
    • Autor
    • _hijack9
    no pusiste el codigo php
    • Autor
    • Pregunton
    Saludos Oigan, esto es justo lo que busco pero falta la parte donde muestren la imagen que subimos no se si puedan ayudarme y si me explicaran todaviade una ofrma mas lenta pq no entiendo muy bien lo de los import gracias
    • Autor
    • aminobwana
    muchas gracias por tu valioso aporte.. me ha sido de gran utilidad .. funciona de pelos!! Salud en hora buena!
    • Autor
    • alexandro reyes
    Hola que tal, tengo un gran problema con esta aplicación, es que al usarla ya en un servidor el archivo que subo no aparece en el directorio que uso!! no se que está pasando. En el código php dice que se sube a una carpeta llamada "subidas/", yo lo cambié por una que se llama "curriculums/" pero subo archivos desde la página y me meto al servidor y la carpeta está vacia, no se por que, si alguien me pudiera ayudar le agradecería mucho, saludos a todos!!
    • Autor
    • alexandro reyes
    Hola que tal, tengo un gran problema con esta aplicación, es que al usarla ya en un servidor el archivo que subo no aparece en el directorio que uso!! no se que está pasando. En el código php dice que se sube a una carpeta llamada "subidas/", yo lo cambié por una que se llama "curriculums/" pero subo archivos desde la página y me meto al servidor y la carpeta está vacia, no se por que, si alguien me pudiera ayudar le agradecería mucho, saludos a todos!!
    • Autor
    • Felipe
    Hola.. oye me sale el mismo error de Jovix, pero no supe arreglar eso de los paths. ¿me podrían ayudar porfavor? Gracias!!
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: