Classe FileReferenceFala galera! Primeiramente, gostaria de pedir desculpas pelo tempo que fiquei sumido… é que estou trabalhando em um projeto meio (bastante) complexo, correndo atrás de construir minha casinha e estou escrevendo esta coluna agora com a mão direita machucada… quem não sabe jogar bola é assim: escorrega na bola e cai em cima da própria mão!! Mas vamos partir para o que interessa. No Flash 8, encontramos uma classe muito interessante, para que possamos trabalhar com upload e download de arquivos (lembra do input do tipo file no HTML???) Uma das grandes diferenças da classe FileReference em relação ao tradicional upload por form de um HTML, é que ela possibilita saber a quantas anda nosso download/upload do arquivo! A maior parte do trabalho com a classe é feita através de listeners. Aqui vão os eventos disparados pela classe que podem ser recuperados e tratados através de listeners:
Os métodos que podem ser invocados com uma instância de FileReference são:
E, finalmente, suas propriedades são:
Todas as propriedades são somente leitura. Bom, agora que vimos o que temos para usufruir na classe FileReference, vamos trabalhar um pequeno exemplo com ela. Abaixo, estão os links para os arquivos PHP que criei para esta coluna. Para não ficar muito extensa, resolvi colocar um link para o fonte deles, formatado pelo próprio PHP. Você poderá fazer o layout da maneira que desejar. Fiz um layout bem simples para que possamos realizar nosso estudo. Todos os desenhos abaixos estão em uma única camada. Todos os botões são componentes Button. Os nomes em vermelho são os NOMES DE INSTÂNCIA de cada objeto.
Depois de nomear CORRETAMENTE os objetos no palco, iremos colocar as ações abaixo em uma NOVA CAMADA, para não misturar objetos com ações. /** URL que serão usadas */
listaURL = “http://www.hufersil.com.br/mx/FileReference/lista.php”; uploadURL = “http://www.hufersil.com.br/mx/FileReference/upload.php”; downloadURL = “http://www.hufersil.com.br/mx/FileReference/arquivos/”; /** importa a classe FileReference */ import flash.net.FileReference; /** importa a classe para coluna de datagrid */ import mx.controls.gridclasses.DataGridColumn; /** Var que checa se o está sendo feito download ou upload */ var busy:Boolean = false; /** listener para upload de arquivos */ var lfr:Object = new Object(); /** tipos que podem ser feitos o upload */ var types:Array = new Array(); var imgFiles:Object = {description:”Imagens (*.jpg, *.jpeg, *.gif, *.png)”,extension:”*.jpg; *.jpeg; *.gif; *.png”}; /** coloca o tipo na matriz de tipos */ types.push(imgFiles); /** quando o usuário selecionar o arquivo */ lfr.onSelect = function (file:FileReference):Void { error.text += “Arquivo ” + file.name + ” selecionado, fazendo upload…” + newline; /** já tenta fazer o upload */ if(busy == false) { if(!file.upload(uploadURL)) { error.text += “Falha na tentativa de upload do arquivo” + newline; } else { btn_cancela_upload.enabled = true; busy = true; btn_escolhe_arquivo.enabled = false; } } } lfr.onCancel = function (file:FileReference) { error.text += “upload cancelado” + newline; btn_cancela_upload.enabled = false; btn_escolhe_arquivo = true; busy = false; barra_upload._xscale = 0; } lfr.onOpen = function(file:FileReference) { error.text += “Arquivo aberto para download: ” + file.name + newline; } lfr.onProgress = function (f:FileReference, bl:Number, bt:Number):Void { barra_upload._xscale = (bl/bt)*100; } lfr.onComplete= function (file:FileReference):Void { error.text += “upload de ” + file.name+ ” completado” + newline; btn_escolhe_arquivo.enabled = true; btn_cancela_upload.enabled = false; busy = false; barra_upload._xscale = 0; _loadXML.sendAndLoad(listaURL, lista_arquivos, “POST”); } lfr.onHTTPError = function(file:FileReference):Void { error.text += “Erro de HTTP” + newline; btn_escolhe_arquivo.enabled = true; btn_cancela_upload.enabled = false; busy = false; barra_upload._xscale = 0; } lfr.onIOError = function(file:FileReference):Void { error.text += “Erro de I/O” + newline; btn_escolhe_arquivo.enabled = true; btn_cancela_upload.enabled = false; busy = false; barra_upload._xscale = 0; } lfr.onSecurityError = function(file:FileReference, errorString:String):Void { error.text += “Erro de segurança” + newline; btn_escolhe_arquivo.enabled = true; btn_cancela_upload.enabled = false; busy = false; barra_upload._xscale = 0; } var fr:FileReference = new FileReference(); fr.addListener(lfr); /** cria uma instancia do FileReference para download */ var filedown:FileReference = new FileReference(); /** listener do filedownload */ var filedown_listener:Object = new Object(); filedown_listener.onProgress = function(obj:FileReference, bl:Number, bt:Number):Void { barra_download._xscale = (bl/bt)*100; } filedown_listener.onIOError = function(obj:FileReference):Void { error.text += “Erro de IO”; btn_cancela_download.enabled = false; busy = false; barra_download._xscale = 0; btn_escolhe_arquivo.enabled = true; } filedown_listener.onHTTPError = function(obj:FileReference):Void { error.text += “Erro de HTTP”; btn_cancela_download.enabled = false; busy = false; barra_download._xscale = 0; btn_escolhe_arquivo.enabled = true; } filedown_listener.onSecurityError = function (obj:FileReference):Void { error.text += “Falha de segurança para download”; btn_cancela_download.enabled = false; busy = false; barra_download._xscale = 0; btn_escolhe_arquivo.enabled = true; } filedown_listener.onCancel = function (obj:FileReference):Void { error.text += “O download de ” + obj.name + ” foi cancelado”; btn_cancela_download.enabled = false; busy = false; barra_download._xscale = 0; btn_escolhe_arquivo.enabled = true; } filedown_listener.onComplete = function(obj:FileReference):Void { error.text += “Download de ” + obj.name + ” completado”; btn_cancela_download.enabled = false; busy = false; barra_download._xscale = 0; btn_escolhe_arquivo.enabled = true; } filedown.addListener(filedown_listener); /** listener do DataGrid */ var lista_listener:Object={}; lista_listener.cellPress = function (evt:Object) { var it:Object = lista.getItemAt(Number(evt.itemIndex)); /** se encontrar o objeto que foi selecionado na lista */ if(it && busy == false) { /** tenta inicia o download */ if(! filedown.download(downloadURL + it.name, it.name) ) { error.text = “Não foi possível abrir a caixa de dialogo para salvar o arquivo”; } else { btn_cancela_download.enabled = true; btn_escolhe_arquivo.enabled = false; busy = true; } } } /** adiciona o listener */ lista.addEventListener(“cellPress”,lista_listener); /** Cria as colunas desejamos que apareçam */ var c_name:DataGridColumn = new DataGridColumn(“name”); c_name.headerText = “Nome”; c_name.width = 150; var c_date:DataGridColumn = new DataGridColumn(“creation”); c_date.headerText = “Data de criação”; c_date.width = 250; /** Adiciona as colunas */ lista.addColumn(c_name); lista.addColumn(c_date); /** deixa os botões de cancelar inativos */ btn_cancela_download.enabled = btn_cancela_upload.enabled = false; /** coloca as barras de progressão com 0 de _xscale */ barra_download._xscale = barra_upload._xscale = 0; /** ações para o botão de cancelar o download */ var cancela_download:Function = function ():Void { filedown.cancel(); btn_cancela_download.enabled = false; busy = false; barra_download._xscale = 0; } btn_cancela_download.addEventListener(“click”, cancela_download); /** ações para o botão de cancelar o upload */ var cancela_upload:Function = function ():Void { fr.cancel(); btn_cancela_upload.enabled = false; btn_escolhe_arquivo.enabled = true; busy = false; barra_upload._xscale = 0; } btn_cancela_upload.addEventListener(“click”, cancela_upload); /** botão para escolher o arquivo para upload */ var escolhe_arquivo:Function = function ():Void { fr.browse( types ); } btn_escolhe_arquivo.addEventListener(“click”, escolhe_arquivo); /** XML para carregar a lista de arquivos */ var lista_arquivos:XML = new XML(); lista_arquivos.ignoreWhite = true; lista_arquivos.onLoad = function () { lista.removeAll(); var node:XMLNode = this.firstChild.firstChild; for(node; node!=null; node=node.nextSibling) { lista.addItem(node.attributes); } } /** utilizamos um objeto loadvars para não ficar no cache */ var _loadXML:LoadVars = new LoadVars(); _loadXML.sendAndLoad( listaURL, lista_arquivos, “POST”); E aqui, está um exemplo dele funcionando! http://www.hufersil.com.br/mx/FileReference/ @braços e fiquem com Deus! |
Ola, achei muito interessante, e útil pra mim, mas como não manjo nada de php gostaria que me disponibilizasse o código php (os links estão quebrados)
Abraço!!
Ola Amigo, teria como disponibilizar os arquivo .php?
Obrigado
Olá os links estão quebrados!!!
Upload de arquivos;
Lista os arquivos;
Preciso dos arquivos ve se deixam as coisa em ordem!!
ponham ae o codigo fonte do php….. pk os links tao todos quebrados e este tutorial sem o php nao vale de muito….;) cumps
Esse estudo é muito bom mesmo!
Pena que os links estejam quebrados
((
Olá!! alguem que conhece o Hugo ou o administrador do site poderia disponibilizar o conteudo dos links quebrados!!!
muito bom tuto mais tem q consertar os links quebrados