FileReference não executa o download
Tuesday, July 29th, 2008Podemos forçar o download de arquivos como um txt, jpg, gif, etc, utilizando PHP manipulando o header. No Flash podemos utilizar também a classe FileReference, faz a mesma coisa, e de forma muito simples, portanto se estamos utilizando o Flash é muito mais vantajoso utilizar a classe do próprio actionscript.
Mas este post não tem intenção de abordar a classe FileReference, e sim de um problema pelo qual passei, observe o script abaixo:
-
function onDownload():void
-
{
-
var fl:FileReference = new FileReference();
-
fl.download(new URLRequest("texto.txt"));
-
}
Um script simples que parece funcionar, entretanto após clicar em salvar na janela aberta no browser o arquivo nunca será salvo.
O problema ocorre porque ao contrário da classe URLLoader, a classe FileReference não permanece disponível quando o escopo onde está presente é descartado, assim a caixa para salvar é aberta, mas o objeto FileReference já foi eliminado.
A solução é muito simples, basta declarar o objeto FileReference em um escopo que estará disponível enquanto o objeto for necessário, em classes declare como uma propriedade.
O script abaixo funcionará:
-
var fl:FileReference = new FileReference();
-
-
function onDownload():void
-
{
-
fl.download(new URLRequest("texto.txt"));
-
}
O problema é documentado pela Adobe em FileReference.download() in SWF file fails.



