Olá Pessoal!
Uma coisa que o pessoal sempre pede na lista, é como fazer o upload de arquivos com Flex,
Um modo é você tratar o Flex como se fosse um form HTML, outro modo é através de ByteArray como este Link.
Hoje mostrarei o modo mais simples, usando a API FileReference.
*Nota: Por questões de segurança do browser, a VM ActionScript não tem acesso direto a arquivos no disco, logo a API apenas da a possibilidade de trabalhar com:
Tamanho, Nome do Arquivo, Data de Criação, Data de modificação e Tipo (extenção).
Neste exemplo mostrarei como fazer o upload com php e java.
No flex é muito simples,
Aqui mostrarei como funciona o “Listeners” que a API oferece:
[as]
public function procuraImg():void
{
fileImagem = new FileReference();
//Ao Selecionar….
fileImagem.addEventListener(Event.SELECT,
function(event:Event):void
{
txtImagem.text = fileImagem.name;
}
);
//Enquanto estiver fazendo o Upload..
fileImagem.addEventListener(ProgressEvent.PROGRESS,
function(event:ProgressEvent):void
{
var numPerc:Number = Math.round((Number(event.bytesLoaded) / Number(event.bytesTotal)) * 100);
titleWindow.status = “Carregando Imagem…”+numPerc+”%”;
}
);
//Ao ocorrer um erro…..
fileImagem.addEventListener(IOErrorEvent.IO_ERROR,
function(event:IOErrorEvent):void
{
Alert.show(“Ocurreu um erro ao Realizar o Upload nDetalhes: “+event.text);
}
);
//Ao Terminar o Upload…..
fileImagem.addEventListener(Event.COMPLETE,
function(event:Event):void
{
fileImagem = null;
titleWindow.status = “Upload efetuado com sucesso!”
}
);
//utilizando filtro para upload somente de imagem
var tipos:FileFilter = new FileFilter(“Arquivos de Imagem *.jpg; *.jpeg; *.gif; *.png”
,”*.jpg; *.jpeg; *.gif; *.png”);
var tiposArray:Array = new Array(tipos);
fileImagem.browse(tiposArray);
}
[/as]
Como podemos ver, é possivel tratar vários eventos,
o mais interessante é o ProgressEvent que como foi apresentado, é possivel fazer um
calculo para gerar a porcentagem de envio.
Com os listeners adicionados, vamos ver como fica quando aciona o upload:
[as]
public function fazerUpload():void
{
if (txtImagem.text != “” || fileImagem != null)
{
//aproximadamente 1MB.
if (fileImagem.size <= 1048576)
{
//Endereco onde esta o aquivo php, ou java.
var request:URLRequest = new URLRequest(“FileUpload.php”);
var vars:URLVariables = new URLVariables();
vars.nomeImagem = txtNomeImagem.text+fileImagem.type;
request.data = vars;
request.method = URLRequestMethod.GET;
fileImagem.upload(request);
}
else
{
titleWindow.status = “Selecione uma Imagem com no maximo 1Mb”;
}
}
else
{
titleWindow.status = “Selecione uma Imagem”;
}
}
[/as]
No PHP fica somente isso:
[php]
//Pega o nome da imagem passado pelo Flex.
$nomeImg = $_GET[nomeImagem];
//Diretório aonde será salvo o arquivo.
$dirImg = dirname(__FILE__).”/img/”;
move_uploaded_file($_FILES[‘Filedata’][‘tmp_name’],$dirImg.$nomeImg);
[/php]
O exemplo acima mostrei fazendo upload usando PHP no beck-end, mas no source,
existe uma servlet java que faz o mesmo papel que o php apresentado.
Aplicação Rodando:
http://23.20.48.222/downloads/postagens/flexupload/index.html
Link do Source
*Flex 3
Obrigado pessoal e Boas festas!
o/
Hi
Free Ringtones Cool – more than 15.000 free polyphonic ringtones, composer ringtones, effect ringtones, real sound ringtones as well as wallpapers and …
[url=http://3ringtone.info/id1.html]download free ringtone[/url]
G’night
LikeLike
Pingback: Free no deposit casinos
Ae, legal esse How To ae, muito simples e explicativo, valeu. =)
LikeLike
muito legal o tutorial, estou com um erro e não sei o pq dele, poderia me ajudar?
Error #2038.
estou usando a sua classe java como back-end, como que eu faço para o flex se comunicar com essa classe?
LikeLike
Olá, ficou muito bom mesmo, meus parabéns, só estou com um problema, eu mudei o objeto para um aimagem, quando ele clica na imagem padrão ele atualiza para a que eu selecionei, mas eu estou com um problema para capturar o diretório dinamicamente. como faço.
this.selecionaArquivo.source = “C:/Documents and Settings/All Users/Documentos/Minhas imagens/Amostras de imagens/”+arquivo.name;
LikeLike
Bom Tarde
Gostei muito do seu post alias me ajudou muito em varias ocasiões:D
Só que agora preciso fazer um opload de imagem via formulário… é possível?
e como eu faria? pois estou muito perdido. 😦
Desde já Agradeço
LikeLike
Cara, ficou meio que incompleto esse seu tutorial né?
LikeLike
Cara…. Muito bom o teu post…
Mas, coloque em letras gigantescas e com “muito brilho” que no source tem a parte java, pois andei revirando a net sobre como fazer upload e não achei tão certinho como aqui.
Só que passei umas 3 ou 4 vezes por aqui mas nunca quiz ler até o final..
😀
Eu só ia em busca direto da parte java.
Um Abraço.
Obrigado.
LikeLike
Pingback: upload de arquivos » Bruno bg + ADOBE FLEX