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);
}
Código :
<?php
if(!empty($_FILES["Filedata"]))
{
if(!empty($_POST["remotefolder"]))
$folder = utf8_decode($_POST["remotefolder"]);
$uploaddir.= utf8_decode($_POST["Filename"]);
if(move_uploaded_file($_FILES["Filedata"]["tmp_name"], $uploaddir))
{
chmod($uploaddir,0777);
echo "File Uploaded :)";
}
else
echo "Cannot upload this file!";
}
?>
Código :
$id = date("Ymd_His");
Código :
$id = date("Ymd_His");
$directorio= 'miDirectorio/'.$id."_";
$uploadFile = $directorio. $HTTP_POST_FILES['Filedata']['name'];
move_uploaded_file($HTTP_POST_FILES['Filedata']['tmp_name'], $uploadFile);
echo $id."_".$HTTP_POST_FILES['Filedata']['name'];
Código :
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, captura_ECHO);
Código :
private function captura_ECHO(event:DataEvent):void {
trace(event.data);
}