Curso AS3

Flash CS4, Salvando dados apenas com Actionscript

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.

This movie requires Flash Player 8.

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');
	}
}

26 Responses to “Flash CS4, Salvando dados apenas com Actionscript”

  1. Lucas Marçal Says:

    Olá Erick
    Muito interessante, cada dia mais o AS3 mostra pq veio para subistituir o AS2, apesar de alguns (incluindo eu) ainda resistir!

    Abs

  2. Erick Souza Says:

    Não resista Lucas! :D

  3. BR-INFOR-BLOG Says:

    CARA, ESTAVA ATRAZ DISSO A ALGUM TEMPO, OBRIGADO PELAS DICAS, FAREI UM BOM PROVEITO. ABRAÇOS

  4. André D´Angelo Says:

    Cara voltei a acompanhar seu Blog, muito boa essa dica de salvar texto, e como é simples!

    Abçs!

  5. Gabriel dos Santos Says:

    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

  6. Erick Souza Says:

    @Gabriel, a mensagem acusa que não existe o método.. tem algo errado, certifique-se de estar compilando para o Flash Player 10.

  7. Gabriel dos Santos Says:

    Problema resolvido:
    Atualizei a minha versão do Adobe AIR
    Agora está perfeito!

  8. Willian Coutinho Says:

    Excelente dica, gostei. Blog nota 10!

  9. Douglas Says:

    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.

  10. afonso Says:

    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.

  11. Erick Souza Says:

    Você pode salvar sim, mas dependerá de suas necessidades no sistema, para decidir se será uma solução para o seu caso.

  12. afonso Says:

    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!!!!!!!

  13. Gláuber Says:

    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

  14. LW Says:

    Excelente dica, gostei. Blog nota 10!

  15. Ronaldo Says:

    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!

  16. Yazz Says:

    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!

  17. Valente Says:

    Muito bom.
    PERGUNTA:
    Depois de salvo esse arquivo TXT, como faço para carregar o conteúdo desse TXT salvo dentro do meu flash?

  18. Alisson Says:

    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?

  19. Paulo Felippe Says:

    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.

  20. Érick Says:

    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

  21. Alexandre Pagano Says:

    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?

  22. Rafael Costa Says:

    Falae Erick! Parabéns, MUITO útil esse método da FileReference. No AS2 era uma vooooolta danada pra salvar o jpeg. Muito bom mesmo.

  23. Leonardo Says:

    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.

  24. Leonardo Says:

    Olá Érick, pode ignorar meu questionamento acima. Custei mas consegui fazer o Flash ler a biblioteca as3corelib.

    Agradeço… sua postagem foi muito importante!

  25. Leonardo Says:

    É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.

  26. leonardo Says:

    Ola pessoal , sou novato no flash, to completamente perdido de como fazer o procedimento acima se alguem puder me ajudar fico agradecido

Leave a Reply