Foros del Web » Creando para Internet » Flash y Actionscript »

Clase File Reference, no me funciona...

Estas en el tema de Clase File Reference, no me funciona... en el foro de Flash y Actionscript en Foros del Web. Bueno, es la 1era vez que llego hasta esta instancia de la clase FileReference y estoy entusiasmado por que voy a resolver muchas cosas una ...
  #1 (permalink)  
Antiguo 23/10/2007, 12:34
 
Fecha de Ingreso: marzo-2007
Mensajes: 782
Antigüedad: 17 años, 1 mes
Puntos: 16
Clase File Reference, no me funciona...

Bueno, es la 1era vez que llego hasta esta instancia de la clase FileReference y estoy entusiasmado por que voy a resolver muchas cosas una vez que la sepa usar...

Cree un .fla donde tengo:

Código:
Nombre de instancia DataGrid = data_mc
Boton Upload = upload_btn
Boton Download = down_btn
MovieClip = load_mc
Barra de porcentaje = barra_mc
Campo de texto dinamico = label_txt
Y obviamente sus componentes en el escenario...

Y el codigo inteligente es:

Cita:

import flash.net.FileReference;
var fileUpload:FileReference = new FileReference();
var path:String = "http://www.bluephotographer.com/files"
var escucha:Object = {};
var fileTypes:Array;
var getFile:String;
function init() {
System.security.allowDomain(path);
load_mc._visible = false;
fileTypes = [{description:"Archivos de Imagen", extension:"*.jpg;*.gif;*jpeg;*.png;*.JPG;*.JPEG", macType:"JPEG;jp2_;GIFF"}];
upload_btn.label = "Upload File";
down_btn.label = "Download File";
upload_btn.addEventListener("click", doUpload);
down_btn.addEventListener("click", doDownload);
fileUpload.addListener(escucha);
escucha.onSelect = doSelect;
escucha.onComplete = doComplete;
escucha.onCancel = doCancel;
escucha.onProgress = doProgress;
data_mc.addEventListener("change", setDownload);
makeList();
}
function doComplete() {
load_mc.barra_mc._xscale = 0;
load_mc.label_txt.text = "Tranferencia Completa";
makeList();
}
function doProgress(archivo:FileReference, bLoaded:Number, bTotal:Number) {
var porcentaje = Math.round((bLoaded*100)/bTotal);
load_mc.label_txt.text = porcentaje+"% del archivo "+archivo.name;
load_mc.barra_mc._xscale = porcentaje;
}
function doCancel() {
trace("El Usuario Cancelo");
}
function doSelect(archivo:FileReference) {
load_mc._visible = true;
load_mc.barra_mc._xscale = 0;
fileUpload.upload(path+"/uploadFile.php");
}
function doDownload() {
if (getFile != undefined) {
fileUpload.download(path+"/"+getFile);
}
}
function doUpload(event) {
fileUpload.browse(fileTypes);
}
function setDownload(c:MovieClip) {
getFile = c.target.selectedItem.Nombre;
}
function makeList() {
data_mc.removeAll();
var list_xml:XML = new XML();
list_xml.ignoreWhite = true;
list_xml.load(path+"/lista.php");
list_xml.onLoad = function() {
var nodos = this.firstChild.childNodes;
for (var a in nodos) {
var size:Number = Math.ceil((nodos[a].attributes.tamanio/1024));
data_mc.addItem({Nombre:nodos[a].attributes.name, Tamaño:size+" Kb"});
}
};
}
init();
La carpeta files, esta creada.Y adentro puse los 2 arhicos .php (lista y uploadFile)
y tambien el .html con el .swf embebido...

Y bueno apreto upload.Busco una imagen acepto y me aparece la barra que carga con el porcentaje...Y despues cuando termina la carga me dice "Tranferencia Completa"...No se que pasa, pero no me sube los archivos...Que puede ser???
Y elñ boton de download no me anda, no hace nada...y el componente Data Grid esta siempre vacio...

no di ningun permiso a las carpetas...

La URL es esta

Espero alguna ayudita, bye...
  #2 (permalink)  
Antiguo 23/10/2007, 14:31
 
Fecha de Ingreso: marzo-2007
Mensajes: 782
Antigüedad: 17 años, 1 mes
Puntos: 16
Re: Clase File Reference, no me funciona...

Bueno ya pude hacer funcionar el upload.php tenia error en el path y por suerte ya suben los archivos....

Pero no me funciona el DataGrid y no puedo ver los archivos q tengo en la carpeta osea no me funciona...

El list.php es:
Cita:

<?php $No=array(".","..","lista.php","uploadFile.php");
$fp=opendir("uploads/"); echo "<?xml version='1.0' ?".">"; echo "<files>";
while (false!($file=readdir($fp)))
{ if ((!in_array($file,$No))&&(is_readable($file)))
{ echo "<file name='".utf_encode($file)."' tamanio='".filesize($file)."' />"; } } closedir($fp); echo "</files>"; ?>
Lo otro q necesitaria hacer es que:

se puedan borrar los archivos, se puedan reemplazar... como tengo q hacer esto??

gracias...

Última edición por eybel; 23/10/2007 a las 14:56
  #3 (permalink)  
Antiguo 24/10/2007, 00:01
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Clase File Reference, no me funciona...

Tienes cosas mal en tu php

Código PHP:
<?php 

header
("Content-type: text/xml\n\n");
echo 
'<?xml version="1.0" encoding="iso-8859-1"?>' "\n";

$No=array(".","..","lista.php","uploadFile.php");
$dir="foros/";
$fp=opendir($dir); 
echo 
"\n"."<files>";
while (
false!==($file=readdir($fp)))

    if ((!
in_array($file,$No))&&(is_readable($dir.$file)))
    {

        echo 
"\n"."<file name='".utf8_encode($file)."' tamanio='".filesize($dir.$file)."' />"
    }


    
closedir($fp); 
echo 
"\n"."</files>"
?>
La cabeceras de forma correcta se ponen utilizando la función header y luego un echo de la cabecera en si.

Tenías un error en la condición del while( el comparador es !== y no !) otro en la condición del if( is_readable($file) se le pasa la ruta completa no sólo el nombre del archivo) y otro en el filesize(igual, ruta completo no sólo nombre de archivo que es lo que tienes en $file)

Para borrar un archivo simplemente se trata de enviar por post a un script en php el nombre del archivo y usar la función unlink en el php que devolverá un booleano dependiende de si hubo éxito que puedes recoger desde flash para mostrar si se borró o no.

Para renombrar un archivo simplemente se trata de enviar por post a un script en php el nombre del archivo y tb el nuevo nombre y usar la función rename en el php que devolverá un booleano dependiende de si hubo éxito que puedes recoger desde flash para mostrar si se renombró o no.

Salu2 ;), espero que te sirva
__________________
[+]
[+]
  #4 (permalink)  
Antiguo 24/10/2007, 11:47
 
Fecha de Ingreso: marzo-2007
Mensajes: 782
Antigüedad: 17 años, 1 mes
Puntos: 16
Re: Clase File Reference, no me funciona...

Muchas gracias por tu ayuda...Me di cuenta de los errores del PHP ahora que lo decis...Aunq de PHP no se mucho, solo edito, pero no desarrollo...En eso estoy...

Te comento que se suben los archivos, eso sigue igual.Y despues de encontrar algunos errores mas mios de paths, ya puedo bajar tambien los archivos gracias a tu ayuda...

Estoy realmente agradecido y bueno esta es la 1era vez q uso la clase FileReference...

Me confundi con respecto a renombrarlo, no es eso aunq podria ser util tambien...
Si no, me referia a sobreescribirlo...Pero me di cuenta que al subir una foto y despue subir otra con el mismo nombre ya lo hace automaticamente al reemplazo de archivos...Asi puedo hacer un gestor...Que es lo q intento armar humildemente...

Lo de borrar me faltaria...

PD: Para borrar un archivo...Puedo hacer lo siguiente?:

Tomar el valor del Datagrid...Mandarlo como POST a un .PHP y que el .PHP sea asi:
Donde la variable $dir = al nombre del archivo...

Cita:

<?php
// ggarciaa at gmail dot com (04-July-2007 01:57)
// I needed to empty a directory, but keeping it
// so I slightly modified the contribution from
// stefano at takys dot it (28-Dec-2005 11:57)
// A short but powerfull recursive function
// that works also if the dirs contain hidden files
//
// $dir = the target directory
// $DeleteMe = if true delete also $dir, if false leave it alone

function SureRemoveDir($dir, $DeleteMe) {
if(!$dh = @opendir($dir)) return;
while (false !== ($obj = readdir($dh))) {
if($obj=='.' || $obj=='..') continue;
if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
}
if ($DeleteMe){
closedir($dh);
@rmdir($dir);
}
}

//SureRemoveDir('EmptyMe', false);
//SureRemoveDir('RemoveMe', true);

?>

Última edición por eybel; 24/10/2007 a las 12:01
  #5 (permalink)  
Antiguo 24/10/2007, 14:47
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Clase File Reference, no me funciona...

Yo diría que para borrar un archivo no hace falta tanto código, simplemente y suponiendo que enviar desde flash una variable llamada fichero

Código PHP:
<?
print "fichero_borrado=".( ( unlink $_POST ['fichero'] ) ) ? "si" "no" ) . "&fin=si";
?>
Con eso y mandado en la variable fichero el path completo debería de funcionar, no hace falta ni separar el fichero del directorio.

Lo puedes usar para borrar "fichero.txt", o por ejemplo "directorio/fichero.txt", esos ejemplos son la variable fichero que envias desde flash a php.

Luego si usas loadVars te devolverá fichero_borrado con valor "si" o "no" dependiendo de si se borró o no.

Es que el ejemplo que tu pusiste creo que es para borrar todo un directorio

Salu2 ;)
__________________
[+]
[+]
  #6 (permalink)  
Antiguo 24/10/2007, 18:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 782
Antigüedad: 17 años, 1 mes
Puntos: 16
Re: Clase File Reference, no me funciona...

Espero ser claro...Lo mas posible...


Claro con eso me estas devolviendo un si o no, si se borro o no...Calculo que eso debe andar...
No se si te defendes en flash tan bien como en .php...Pero bueno esto me supero por ahora...es la 1era vez q acudo a esta programacion...

Agregue esto para poder enviar a un .php "phpborrar.php" mediante la variable "borrar" y con el metodo post...Para hacer la funcion de borrar un archivo seleccionado desde el DataGrid...

Esta funcion seleccionar_borrar la agregue yo...Asi seleccionaba el archivo para hacer el download, yo lo queria usar para ahorra hacer referencia a ese archivo seleccionado desde el DataGrid y poder borrarlo... mediante sendAndLoad del path completo mas el nombre tomado en la funcion getFile

En el .fla agregue esto:
Cita:

function setdelete(c:MovieClip) {
getFile = c.target.selectedItem.Nombre; // no se si esta bien creado
}

borrar_archivo = function () {
setdelete();
borrar = (path+"/uploads/"+getFile); ///aca no se si getFile toma bien el nombre del archivo ya que esa variable esta en la funcion setdelete, por eso la llamo antes poniendo setdelete();

borrar = new LoadVars();
borrar.sendAndLoad("phpborrar.php", borrar, "POST");
}
borrar_btn.onRelease = borrar_archivo;

////y aca abajo para recibir la variable////

estado = new LoadVars();
estado.onLoad = function() {
if (this.estatus == "borrar_borrado") {
load_mc.label_txt.text = (borrar+" borrado!!!")}};

El codigo antes de agregar la funcion de borrar archivos era asi:

Cita:

import flash.net.FileReference;
var fileUpload:FileReference = new FileReference();
var path:String = "http://www.web.com/files"
var escucha:Object = {};
var fileTypes:Array;
var getFile:String;
function init() {
System.security.allowDomain(path);
load_mc._visible = false;
fileTypes = [{description:"Archivos de Imagen", extension:"*.jpg;*.gif;*jpeg;*.png;*.JPG;*.JPEG", macType:"JPEG;jp2_;GIFF"}];
upload_btn.label = "Upload File";
down_btn.label = "Download File";
upload_btn.addEventListener("click", doUpload);
down_btn.addEventListener("click", doDownload);
fileUpload.addListener(escucha);
escucha.onSelect = doSelect;
escucha.onComplete = doComplete;
escucha.onCancel = doCancel;
escucha.onProgress = doProgress;
data_mc.addEventListener("change", setDownload);
makeList();
}
function doComplete() {
load_mc.barra_mc._visible = false;
load_mc.label_txt.text = "Tranferencia Completa";
makeList();
}
function doProgress(archivo:FileReference, bLoaded:Number, bTotal:Number) {
var porcentaje = Math.round((bLoaded*100)/bTotal);
load_mc.barra_mc._visible = true;
load_mc.label_txt.text = porcentaje+"% del archivo "+archivo.name;
load_mc.barra_mc.gotoAndStop(porcentaje);
}
function doCancel() {
trace("El Usuario Cancelo");
}
function doSelect(archivo:FileReference) {
load_mc._visible = true;
//load_mc.barra_mc._xscale = 0;
fileUpload.upload(path+"/uploadFile.php");
}
function doDownload() {
if (getFile != undefined) {
fileUpload.download(path+"/uploads/"+getFile);
}
}
function doUpload(event) {
fileUpload.browse(fileTypes);
}
function setDownload(c:MovieClip) {
getFile = c.target.selectedItem.Nombre;
}
function makeList() {
data_mc.removeAll();
var list_xml:XML = new XML();
list_xml.ignoreWhite = true;
list_xml.load(path+"/lista.php");
list_xml.onLoad = function() {
var nodos = this.firstChild.childNodes;
for (var a in nodos) {
var size:Number = Math.ceil((nodos[a].attributes.tamanio/1024));
data_mc.addItem({Nombre:nodos[a].attributes.name, Tamaño:size+" Kb"});
}
};
}
init();
Y bueno quedaria asi entonces el codigo final:

Cita:

import flash.net.FileReference;
var fileUpload:FileReference = new FileReference();
var path:String = "http://www.web.com/files"
var escucha:Object = {};
var fileTypes:Array;
var getFile:String;
function init() {
System.security.allowDomain(path);
load_mc._visible = false;
fileTypes = [{description:"Archivos de Imagen", extension:"*.jpg;*.gif;*jpeg;*.png;*.JPG;*.JPEG", macType:"JPEG;jp2_;GIFF"}];
upload_btn.label = "Upload File";
down_btn.label = "Download File";
upload_btn.addEventListener("click", doUpload);
down_btn.addEventListener("click", doDownload);
fileUpload.addListener(escucha);
escucha.onSelect = doSelect;
escucha.onComplete = doComplete;
escucha.onCancel = doCancel;
escucha.onProgress = doProgress;
data_mc.addEventListener("change", setDownload);
makeList();
}
function doComplete() {
load_mc.barra_mc._visible = false;
load_mc.label_txt.text = "Tranferencia Completa";
makeList();
}
function doProgress(archivo:FileReference, bLoaded:Number, bTotal:Number) {
var porcentaje = Math.round((bLoaded*100)/bTotal);
load_mc.barra_mc._visible = true;
load_mc.label_txt.text = porcentaje+"% del archivo "+archivo.name;
load_mc.barra_mc.gotoAndStop(porcentaje);
}
function doCancel() {
trace("El Usuario Cancelo");
}
function doSelect(archivo:FileReference) {
load_mc._visible = true;
//load_mc.barra_mc._xscale = 0;
fileUpload.upload(path+"/uploadFile.php");
}
function doDownload() {
if (getFile != undefined) {
fileUpload.download(path+"/uploads/"+getFile);
}
}
function doUpload(event) {
fileUpload.browse(fileTypes);
}
function setDownload(c:MovieClip) {
getFile = c.target.selectedItem.Nombre;
}
function makeList() {
data_mc.removeAll();
var list_xml:XML = new XML();
list_xml.ignoreWhite = true;
list_xml.load(path+"/lista.php");
list_xml.onLoad = function() {
var nodos = this.firstChild.childNodes;
for (var a in nodos) {
var size:Number = Math.ceil((nodos[a].attributes.tamanio/1024));
data_mc.addItem({Nombre:nodos[a].attributes.name, Tamaño:size+" Kb"});
}
};
}
function setdelete(c:MovieClip) {
getFile = c.target.selectedItem.Nombre; // no se si esta bien creado
}

borrar_archivo = function () {
setdelete();
borrar = (path+"/uploads/"+getFile); ///aca no se si getFile toma bien el nombre del archivo ya que esa variable esta en la funcion setdelete, por eso la llamo antes poniendo setdelete();

borrar = new LoadVars();
borrar.sendAndLoad("phpborrar.php", borrar, "POST");
}
borrar_btn.onRelease = borrar_archivo;

////y aca abajo para recibir la variable////

estado = new LoadVars();
estado.onLoad = function() {
if (this.estatus == "borrar_borrado") {
load_mc.label_txt.text = (borrar+" borrado!!!")}};


init();
Bueno seguro cometi errores...estoy estudiando todo esto...
Muchas gracias...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:48.