Dica Adobe Air – Drag & Drop Ficheiros + Pastas

Dica Adobe Air – Drag & Drop Ficheiros + Pastas

O Adobe Air está cada vez mais evoluido, e no decorrer de um projeto que estou envolvido foi necessário criar uma area na minha aplicação que aceitasse o drag-n-drop de uma pasta da maquina do utilizador e que adicionasse os ficheiros que esta pode ter dentro. Nem todos os ficheiros seriam adicionados, apenas os ficheiros com as extensões que eu seriam apresentados na minha lista.

Bom, esta é uma questão que muita gente têm, como ler recursivamente o conteudo de uma pasta da maquina do utilizador?

Pois então, a solução é bem simples, segue o exemplo (não vou mostrar como fazer o drag-n-drop, mas apenas como lidar com a pasta que foi largada na nossa aplicação)

Na função onDrop, vamos buscar o arquivo (uma pasta é considerada como arquivo tambem) da area de “transferência” do evento(clipboard), para isso fazemos:
[coolcode lang=’as3′ linenum=’off’] var arr:Array = evento.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
[/coolcode]

onde o ‘evento’, é o nosso evento NativeDragEvent disparado pela area que recebeu o drop do arquivo/pasta.

Vamos agora buscar o arquivo e fazer o seu cast como File:
[coolcode lang=’as3′ linenum=’off’] var arquivo:File = File(arr[0]);
[/coolcode]

Temos então o File que pode conter um arquivo individual ou então uma pasta, vamos então identificar qual deles é:

[coolcode lang=’as3′ linenum=’off’] if(arquivo.isDirectory) {
//é uma pasta
//vamos então percorrer esta pasta para encontrar todos os ficheiros dentro dela
var pasta:Array = arquivo.getDirectoryListing();
for each (var arquivoIn:File in pasta)
{
if (arquivoIn.isDirectory) {
//é uma pasta, para buscar os arquivos dela basta repetir a operação
//nesse ponto, o mais facil será separar a funcao para listar arquivos e chama-la a cada pasta encontrada
}
else {
//é um arquivo
meuDataProviderArquivos.addItem(arquivoIn);
}
}
}
else {
//é um arquivo
meuDataProviderArquivos.addItem(arquivo);
}
[/coolcode]

E pronto, no final disto têm a listagem de ficheiros da pasta no meuDataProvider. A partir daí podem então fazer o controlo dos arquivos que querem ou não no vosso data provider, usando uma simples comparação da extensão do arquivo (arquivo.extension).

Simples, eficaz e muito util.

Abraço.


Leave a Comment

Post