Upload usando apenas FileReference
O amigo Guilherme postou a pouco em meu fórum um dúvida a respeito de upload usando apenas o FileReference, e achei o assunto bacana para ser compartilhado aqui. Já vi muitos amigos e eu usando soluções tão complexas, sendo que existe uma maneira nativa no Actionscript muito simples de realizar uploads de qualquer tipo de arquivo.
Escrevi um classe muito básica para focar na simplicidade que é este processo, porém você pode implementar mais recursos, como registro de evento externamente via EventDispatcher. Vale lembrar que não adiantar escrever em classe e programar como se fosse uma timeline.
Não há muito a ser falado, o método utilizado é o upload() da classe FileReference, linguagens externas serão usadas unicamente para mover o arquivo para a pasta desejada, ou ainda para a manipulação de dimensões, nomes, etc.
package { import flash.net.*; import flash.events.*; public class upLoad { private var fr:FileReference = new FileReference(); private var upUrl:String; private var btn:Object; public function upLoad(obj:Object):void { this.btn = obj.btn; this.upUrl = obj.url; this.initHandler(); } private function initHandler():void { this.btn.addEventListener(MouseEvent.CLICK, startUpload); this.fr.addEventListener(Event.SELECT, selectHandler); this.fr.addEventListener(ProgressEvent.PROGRESS, progressHandler); this.fr.addEventListener(Event.COMPLETE, completeHandler); } private function startUpload(evt:Event):void { fr.browse([new FileFilter("Imagens", "*.jpg;*.gif;*.png")]); } private function selectHandler(evt:Event):void { fr.upload(new URLRequest(this.upUrl)); } private function progressHandler(evt:ProgressEvent):void { trace(Math.round(evt.bytesLoaded / evt.bytesTotal) * 100 + "% Enviado") } private function completeHandler(evt:Event):void { trace("COMPLETE"); } } }
Para usar a classe segue um exemplo:
var up:upLoad = new upLoad({btn: this.btnBuscar, url: "http://localhost/Examples/upload.php"});
E como foi dito, a participação do PHP não tem nada relacionado como o upload, ele apenas move o arquivo da pasta temporária para a pasta onde se encontra o script PHP.
<?php move_uploaded_file($_FILES['Filedata']['tmp_name'], "./".$_FILES['Filedata']['name']); echo "recebido"; ?>




February 10th, 2009 at 7:56
A questao é: que outra solução para upload tem-se usado no Flex? Pois eu só conheço o FileReference, que aliás, acho uma porcaria, visto que não envia para o backend informações importante sobre o arquivo, como por exemplo seu tipo mime.
=D
abração,
Ved
March 25th, 2009 at 17:18
Estou desenvolvendo um sistema de upload (múltiplo), no PC está rodando muito bem, já no Mac não aparece as informações do ProgressEvent.PROGRESS, fiz um teste com este (tutorial) e também ocorreu o mesmo problema.
Você sabe o que posso fazer para solucionar este problema?
Obrigado.
April 3rd, 2009 at 12:37
Super atualizado
May 6th, 2009 at 8:52
Parabéns Erick Souza, mais uma vez contribuindo com a evolução dos programadores brasileiros.
November 25th, 2009 at 7:15
Olá Erick, eu gostaria de saber como adaptar esse upload no ASP, fico no aguardo.
November 25th, 2009 at 9:51
O titulo é “Upload usando apenas FileReference”, mas vc está usando PHP então faltou “Upload usando apenas FileReference com PHP”, pois não tem como usar apenas o “FileReference “.