Flash CS4, Salvando dados apenas com Actionscript
O FileReference já era de grande ajuda, como ele podemos “forçar” o download de arquivos que estejam no servidor sem usar linguagens externas. Mas no caso de efetuar o download de um texto ou imagem que estejam apenas no SWF era preciso enviar os dados para uma linguagem externa ajudar no trabalho; felizmente o CS4 trouxe um update incluindo o método Save() na classe FileReference que tornou isto possível.
Para salvar textos é muito simples, envie a string para o método Save() e pronto.
var fr:FileReference = new FileReference(); fr.save('Texto aqui.', 'texto.txt');
E para salvar imagens também é muito simples, e para facilitar ainda mais utilizarei a classe JPGEncoder para gerar o ByteArray da imagem. (A classe JPGEncoder está presente na library as3corelib.)
Observe abaixo como é criado o ByteArray da imagem utilizando o JPGEncoder. Basicamente é passado um BitmapaData para o método encode().
import com.adobe.images.JPGEncoder; var bmd:BitmapData = new BitmapData(200, 200); bmd.draw(mcBola); var jenc:JPGEncoder = new JPGEncoder(100); //o valor 100 representa a qualidade da imagem var barray:ByteArray = jenc.encode(bmd);
O ByteArray é passado para o método Save() ficando da forma a seguir.
import com.adobe.images.JPGEncoder; var fr:FileReference = new FileReference(); var bmd:BitmapData = new BitmapData(200, 200); bmd.draw(mcBola); var jenc:JPGEncoder = new JPGEncoder(100); //o valor 100 representa a qualidade da imagem var barray:ByteArray = jenc.encode(bmd); fr.save(barray, 'imagem.jpg');
O filme abaixo mostra os dois casos na prática.
Segue o script usado no filme acima.
import com.adobe.images.JPGEncoder; this.addEventListener(MouseEvent.CLICK, onSave); var fr:FileReference = new FileReference(); function onSave(evt:MouseEvent):void { if(evt.target.name == 'btnText') fr.save(textBox.text, 'Texto-FileReference.txt'); else if(evt.target.name == 'btnImage') { var bmd:BitmapData = new BitmapData(400, 200); bmd.draw(this); var barray:ByteArray = new JPGEncoder(100).encode(bmd); fr.save(barray, 'Imagem-FileReference.jpg'); } }




December 19th, 2008 at 16:20
Olá Erick
Muito interessante, cada dia mais o AS3 mostra pq veio para subistituir o AS2, apesar de alguns (incluindo eu) ainda resistir!
Abs
December 19th, 2008 at 19:09
Não resista Lucas!
January 19th, 2009 at 0:09
CARA, ESTAVA ATRAZ DISSO A ALGUM TEMPO, OBRIGADO PELAS DICAS, FAREI UM BOM PROVEITO. ABRAÇOS
January 20th, 2009 at 8:55
Cara voltei a acompanhar seu Blog, muito boa essa dica de salvar texto, e como é simples!
Abçs!
January 21st, 2009 at 16:40
Cara, pode me ajudar? estou fazendo desse jeito mas aqui está dando a seguinte msg de erro:
1061: Call to a possibly undefined method save through a reference with static type flash.net:FileReference.
parece que o método save não existe na classe FileReference O.o
Estou usando flashCS4 e AS3.0
January 22nd, 2009 at 13:17
@Gabriel, a mensagem acusa que não existe o método.. tem algo errado, certifique-se de estar compilando para o Flash Player 10.
January 22nd, 2009 at 13:36
Problema resolvido:
Atualizei a minha versão do Adobe AIR
Agora está perfeito!
March 3rd, 2009 at 0:40
Excelente dica, gostei. Blog nota 10!
March 14th, 2009 at 15:21
Erick, sou admirador do seu trabalho e acgho que vc possa me ajudar, estou fazndo um site em que o usuário possa desenhar plantas baixas, tenho que colocar uma forma de que o mouse só faça linhas retas, mas não estou conseguindo, um exemplo do que eu estou fazendo esta em http://www.paginateste.890m.com. se vc puder me ajudar ficaria agradecido e podemos até dicutir um preço para isso. Grato e até mais.
May 17th, 2009 at 9:55
ola erik mt interessante seu blog… mas tenho uma dúvida, qr dizer q com este metodo “save” podemos podemos criar um pequeno sistema de cadastro em flash para que as informações sejam salvas em txt?
bem, se for.. é uma grande novidade p flash, pois ele sempre dependeu de recursos externos para este tipo de situação…
responda por gentileza…
abraço.
May 18th, 2009 at 14:48
Você pode salvar sim, mas dependerá de suas necessidades no sistema, para decidir se será uma solução para o seu caso.
May 18th, 2009 at 20:45
na realidade gostaria de implementar um painel eletrônico onde ficam quatro frases fixas, so q as msm podem sofrer mudanças a qualquer momento, como será um usuario leigo em flash que ficará atualizando as msg, é necessario o uso de uma interface amigavel para que o msm possa adicionar e excluir as frases do swf
…estava implementando um exe de flash para buscar dados de um xml…, os dados do xml são manipulados por uma interface de delphi….bem a questão é q eu gostaria de implementar td em flash…. por isso recorro a recomendações…
grato pela atenção!!!!!!!
May 21st, 2009 at 0:02
Cara! Muito legal esses tutos!
E quando eu tiver uma grana ‘extra’ vou ver se compro o curso! Confesso que fiquei ancioso e de queixo no chão! Muito bom!
Abraços
May 28th, 2009 at 20:03
Excelente dica, gostei. Blog nota 10!
June 16th, 2009 at 8:36
Olá caro amigo Erick, gostei muito deste tuto… porém tenho uma duvida.
estou precisando fazer um sistema de cadastro interno em em que possa salvar no .txt os dados dos clientes, como nome, telefone etc… porém tudo em um arquivo só e tambem fazer um searcher aos clientes no mesmo. se pudesse me ajudar ficaria bastante grato pois ja procuro por isso a bastante tempo
obrigado!
June 22nd, 2009 at 12:10
Uma dúvida que é semelhante ao que está aí.
No exemplo, está mostrando como transformar algo dentro do flash em imagem ou texto. Eu queria saber como faz para salvar algo que está fora (local) para outro lugar. Como por exemplo, um link para salvar um ppt, pdf ou .ai de um CD para qualquer outro lugar, como se fosse um SAVE AS, uma simples cópia do arquivo para outro lugar que o usuário escolher.
O GET URL abre um navegador e também se for extensões que o navegador aceita, acaba abrindo nele ao invés de salvar. Usando arquivos .bat é possível executar diretamente o arquivo, porém não tem como fazer um pedido de salvar como.
Com o FileReference só é possível fazer isso quando o arquivo está online, mas e no caso de estar local?
Existe alguma maneira? Vasculhei a internet inteira, mas sem resposta…
Eu vi um aplicativo que compila em flash e conseguiu fazer isso, se chama My Flash Application, porém, não tem como descompilar para saber o script e nem tenho o arquivo fonte para editar no programa.
Alguém tem alguma solução?
Obrigado!
July 21st, 2009 at 17:20
Muito bom.
PERGUNTA:
Depois de salvo esse arquivo TXT, como faço para carregar o conteúdo desse TXT salvo dentro do meu flash?
August 13th, 2009 at 11:45
Eric, é possível salvar automaticamente essa imagem em um local específico? Sem q abra a janela de save e não tenha q clicar em salvar?
September 15th, 2009 at 13:43
Erick, precisava criar o mesmo método de salvar a imagem enviá-la diretamente para um email… seria possível? você teria algum código de exemplo? grato.
September 23rd, 2009 at 15:56
Boa tarde Érick, vc poderia me disponibilizar o .fla desce exemplo?
estou começando a aprender flash agora. E não estou conseguindo fazer.
Desde já agradeço
Obrigado
September 25th, 2009 at 19:00
Oi Erick!
Estou com um grande problema tenho que programar uma serie de jogos de treinamentos e preciso integrar (Ler e gravar) informações (textos e imagens) a um banco de dados local e de um servidor.
Você poderia me dar uma dica onde encontro isto ou se com o FileReference eu consigo isto?
December 2nd, 2009 at 20:41
Falae Erick! Parabéns, MUITO útil esse método da FileReference. No AS2 era uma vooooolta danada pra salvar o jpeg. Muito bom mesmo.
December 9th, 2009 at 21:50
OLÁ ERICK, ESTOU MONTANDO UM FLASH DE DESENHAR COM O MOUSE E SALVAR A TELA PARA 2 SOBRINHAS.
ESTOU PARADO NESSE PONTO DE SALVAR O DESENHO QUE ELAS FIZERAM. É POSSÍVEL DISPONIBILIZAR ESSE .FLA PRA GENTE ? SOU LEIGO NISSO MAS GOSTARIA DE FINALIZAR O TRABALHO.
PS.: TENTEI, MAS ESTÁ DANDO ALGUNS ERROS.
OBRIGADO E PARABÉNS PELA POSTAGEM, FICOU MUITO BOA.
1119: Access of possibly undefined property release through a reference with static type flash.display:SimpleButton.
1172: Definition com.adobe.images:JPGEncoder could not be found.
1180: Call to a possibly undefined method JPGEncoder.
December 10th, 2009 at 14:45
Olá Érick, pode ignorar meu questionamento acima. Custei mas consegui fazer o Flash ler a biblioteca as3corelib.
Agradeço… sua postagem foi muito importante!
February 21st, 2010 at 8:52
Érick, preciso saber se há alguma propriedade do save() que eu consiga fixar para salvar sempre dentro de um mesmo diretório?
é porque abre a caixa de diálogo do windows e sempre vai salvar dentro do último diretório salvo. eu gostaria de fixar pra salvar sempre dentro de c:\, por exemplo.
February 25th, 2010 at 16:54
Ola pessoal , sou novato no flash, to completamente perdido de como fazer o procedimento acima se alguem puder me ajudar fico agradecido