
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:
var request:URLRequest=new URLRequest('archivo_subidor.php?id_sesion=' + id);
fileReference.upload(request);
y recrear la sesión en php con ese id:
if(array_key_exists('id_sesion', $_REQUEST)) {
session_id($_REQUEST['id_sesion']);
}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)

Etiquetas: save() encode() FileReference JPGEncoder
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():
/** * * @param e * Para guardar: * 0. Oculto el botón de guardar para que no salga en el pantallazo * 1. Crear un Bitmapdata con el objeto que queremos guardar * 2. Crear un bitmap con ese BitmapData * 3. Crear una variable de tipo JPGEncoder(la calidad de 1 a 100) * 4. Llamar a la función encode de JPGEncoder pasando como parámetro el bitmapData * 5. Llamar a la función save() de FileReference pasando como parámetro el ByteArray del punto anterior y el nombre * con el que queremos guardar el archivo * 6. Mostrar de nuevo el botón de guardar */private function guardar(e:MouseEvent):void {
boton_guardar.visible = false;
var bitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight);
bitmapData.draw(stage);
var bitmap:Bitmap = new Bitmap(bitmapData)
var jpg:JPGEncoder = new JPGEncoder(80);
var ba:ByteArray = jpg.encode(bitmapData);
file.save(ba, 'captura.jpg');
boton_guardar.visible = true;
}
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:
var request:URLRequest = new URLRequest(url);
request.method = URLRequestMethod.POST;
request.data = new URLVariables();
request.data.nombre = Nombre_txt.text;
request.data.destinatario = Destinatario_txt.text;
subidor.upload(request);
Estas variables las recogemos después en el PHP con el nombre que les hayamos puesto con:
$_REQUEST[nombre]
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

Etiquetas: FileFilter FileReference URLRequest browse upload