A muchos, nos pasa que queremos subir ficheros desde nuestras aplicaciones Flex o Flash, y para ellos usamos la clase a tal efecto llamada Filereference, pero también nos interesa sobremanera el poder conocer de antemano la ruta y nombre final de nuestro fichero en el servidor, y sobre todo tratar dicho nombre para evitar duplicados.
A continuación muestro un extracto de un objeto que realicé a tal efecto, la idea que aplico es la de aprovechar el envío por POST que genera Filereference para enviar el fichero, para enviar variables propias seteadas de manera precisa, para poder usar esa información extra en el servicio remoto que tratará el fichero subido, y a la postre lo renombrará y ubicará en el lugar indicado por nosotros en esas variables propias.
La función selectFile evento select de la caja de ficheros de Filereference, fijaos que creo una variable llamada Filename para llevar el nombre que quiero tener en el fichero al servicio remoto que lo creará, genUid() es una función propia que me genera un time shot para garantizar un nombre único en mi fichero.
Código :
private var file:FileReference; private var req:URLRequest; private var vars: URLVariables;
//Llamada por el usuario public function openFile():void { vars.description = "DESCRIPCION que quieras pasar si para lo que sea"; vars.Remotefolder = "/www/files"; req.url = url; req.data = vars; req.method = URLRequestMethod.POST;
file.addEventListener(Event.SELECT, selectFile);
file.browse(); }
//Interna para Filereference private function selectFile(event:Event):void { file.removeEventListener(Event.SELECT,selectFile); vars.Filename = genUid() + file.name; file.upload(req); }
Luego en el servicio solo tienes que acceder a las variables que has creado en vars, por método POST, y listo en PHP sería algo como esto:
También podéis usar el servlet, que realicé hace unos meses y he posteado como aporte, como servicio remoto en Java para el tratamiento de vuestros ficheros subidos con nombres personalizados en Java.
estos tips son lindos aporte: Añadiendo al post de MorphX. Lo que haré es dar el trabajo de crear archivos únicos por el lado de PHP, eso quiere decir q podré subir archivos desde mi cliente FLEX con cualquier nombre y nuestro amigo PHP hará el trabajo de hacerlos únicos.
¿Cómo? existe muchas maneras, la que más me agrada es darle un valor por fechas y horas... digamoss que es poco probable (por no decir imposible) que el método pueda ser invocado exactamente a un día y hora especifica Personalmente uso solo fecha-hora, algo así:
Código :
$id = date("Ymd_His");
Pero si queremos ser más exquisitos, podemos utilizar milisegundos
Incluso ahi le agrego el nombre que me envía Flex, si quiero lo agrego para tenerlo de referencia, aunque personalmente no lo hago existen "usuarios" q les gusta tener archivos con espacio y caracteres especiales
Explico un poco el php que tengo (es un file básico con solo lo que necesito para este ejemplo) 1. Creo una variable id que contendrá la fecha y hora 2. Agrego el directorio, el valor del id más un "_" 3. Concateno o anido el directorio + id+ "_"+ el nombre del archivo 4. Cargo el file 5. hago un echo de lo que cargué al server
Hasta ahi todo se entiende, ustedes se preguntan, y cómo relacionó el nuevo nombre del file con mi aplicación Flex? Para eso esta el echo que hice en el php
Lo que hago es tener nuevos eventos en mi FileReference