Perdida de sesión al hacer una subida con FileReference

Perdida de sesión al hacer una subida con FileReference

Etiquetas: FileReference

Este bug / "comportamiento raro", se reproduce al hacer una subida desde flash con FileReference. Esta subida hace que se pierda la sesión en el servidor, lo que nos puede dar problemas si estamos utilizando el id de sesión para controlar las subidas de los usuarios.

Una solución es pasar por get el id de la sesión a la hora de hacer la subida:

  1.  
  2. var request:URLRequest=new URLRequest('archivo_subidor.php?id_sesion=' + id);
  3. fileReference.upload(request);
  4.  

y recrear la sesión en php con ese id:

  1.  
  2.   if(array_key_exists('id_sesion', $_REQUEST)) {
  3.   session_id($_REQUEST['id_sesion']);
  4.   }
  5.   session_start()

Mas información sobre el tema aquí, y gracias a Israel Pastrana por la info que me pasó en su día (se topó con el bug el mismo día que yo :D)

Guardar una imagen con la función save() de FileReference

Guardar una imagen con la función save() de FileReference

Etiquetas: save() encode() FileReference JPGEncoder

Guardar una imagen con la función save() de FileReference

Una de las novedades de Flash Player 10 fue la función save() de FileReference.

Esta clase permite guardar un archivo directamente en el ordenador del usuario, si necesidad de pasar por el servidor.

En este ejemplo, guardo una captura del stage en una imagen codificada como jpg (utilizando la clase JPGEncoder de adobe y la función save():

  1.  
  2. /**
  3.  * 
  4.  * @param	e
  5.  * Para guardar:
  6.  * 0. Oculto el botón de guardar para que no salga en el pantallazo
  7.  * 1. Crear un Bitmapdata con el objeto que queremos guardar
  8.  * 2. Crear un bitmap con ese BitmapData
  9.  * 3. Crear una variable de tipo JPGEncoder(la calidad de 1 a 100)
  10.  * 4. Llamar a la función encode de JPGEncoder pasando como parámetro el bitmapData
  11.  * 5. Llamar a la función save() de FileReference pasando como parámetro el ByteArray del punto anterior y el nombre
  12.  * con el que queremos guardar el archivo
  13.  * 6. Mostrar de nuevo el botón de guardar
  14.  */
  15.  private function guardar(e:MouseEvent):void {
  16. 	boton_guardar.visible = false;
  17. 	var bitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight);
  18. 	bitmapData.draw(stage);
  19. 	var bitmap:Bitmap = new Bitmap(bitmapData)
  20. 	var jpg:JPGEncoder = new JPGEncoder(80);
  21. 	var ba:ByteArray = jpg.encode(bitmapData);
  22. 	file.save(ba, 'captura.jpg');
  23. 	boton_guardar.visible = true;
  24. }
  25.  
Envio de email con adjuntos en AS3 y PHP

Envio de email con adjuntos en AS3 y PHP

Etiquetas: FileReference FileFilter URLRequest

Este ejemplo muestra como hacer un formulario en Flash (Actionscript 3.0) con envio de adjuntos.

El esquema básico es que hacemos una subida normal con FileReference, y en el URLRequest de la subida incluimos las variables que queramos adjuntar en el formulario:

  1.  
  2. var request:URLRequest = new URLRequest(url);
  3. request.method = URLRequestMethod.POST;
  4. request.data = new URLVariables();
  5. request.data.nombre = Nombre_txt.text;
  6. request.data.destinatario = Destinatario_txt.text;	
  7. subidor.upload(request);
  8.  

Estas variables las recogemos después en el PHP con el nombre que les hayamos puesto con:

  1.  
  2. $_REQUEST[nombre]
  3.  

En el php tenemos el código típico de una subida, y una vez terminada pasamos a montar el correo electrónico.

Dejo los fuentes con el fla, la clase Formulario, y el php para la subida.

El código php es una versión adaptada del que podéis encontrar en esta página

ActionScript 3.0: Subir archivos con FileReference y PHP

ActionScript 3.0: Subir archivos con FileReference y PHP

Etiquetas: FileFilter FileReference URLRequest browse upload

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".