Como fazer uploads de arquivos utilizando FileRefernece

Esse é um recurso muito interessante do Flash que possibilita enviar arquivos para um servidor diretamente da apresentação.

Por | @oficinadanet Softwares
Esse é um recurso muito interessante do Flash que possibilita enviar arquivos para um servidor diretamente da apresentação, tornando desnecessária a utilização de forms em HTML, a classe FileReference pode ser utilizada tanto para upload quanto download de arquivos através do flash.

Restrições:
Ao utilizar a FileRefence é preciso lembrar das políticas de segurança do Flash, como a restrição quanto ao acesso de outros servidores pelo Flash. Essas políticas se aplicam aos dados enviados utilizando FileReference. Caso você tente acessar ou enviar algum arquivo que não esteja no mesmo domínio que a apresentação Flash, será gerado um erro de segurança e a operação será cancelada. Por isso é preciso tomar cuidado com onde a sua aplicação irá rodar e como você se referenciará aos arquivos no servidor, por exemplo. Se eu tiver uma apresentação que eu acesso pelo endereço:
"http://www.meudominio.com.br/oficina/app.swf"
e nessa apresentação eu tento chamar um arquivo utilizando o endereço: "http://meudominio.com.br/oficina/arquivos/exemplo.jpg"
irá gerar um erro de segurança. Apesar dos arquivos estarem no mesmo servidor o Flash irá considerá-lo diferente e não permitira o acesso a ele.

Os Eventos:
É através dos listeners que iremos controlar todo o processo de upload.
A classe FileReference possui os seguintes eventos:

    onCancel(fileRef:FileReference):Void
    // Disparado quando o usuário cancelar a tela de "browser" onde se seleciona o arquivo para upload ou download
    
    onSelect(fileRef:FileReference):Void
    // Disparado quando o usuário seleciona um arquivo para upload
  
    onOpen(fileRef:FileReference):Void
    // Disparado no inicio do upload ou download
  
    onProgress(fileRef:FileReference, bytesLoaded:Number, bytesTotal:Number):Void
    // Disparado quando houver algum progresso no envio
  
    onComplete(fileRef:FileReference):Void
    // quando o upload ou download for completado
  
    onHTTPError(fileRef:FileReference):Void
    // Disparado quando ocorrer algum erro HTTP ex.: (404 arquivo não encontrado, quando tentar fazer download de algum arquivo)
  
    onIOError(fileRef:FileReference):Void
    // Disparado caso ocorra algum erro na leitura ou escrita do arquivo
  
    onSecurityError(fileRef:FileReference, errorString:String):Void
    // Disparado quando algum erro de segurança acorrer

  
Para acessar esses eventos é utilizado a seguinte estrutura:

var myListener:Object = new Object();
myListener.[EVENTO] = new Function({PARAMETROS_DO_EVENTO}){
    // ------------------ faça algo maravilhoso aqui ------------------ //
}
myFileRefenrence.addEventListener(myListener);

ex.:


var myListener:Object = new Object();
myListener.onComplete = new Function(fileRef:FileReference){
    trace("Upload Completo");
}
myFileRefenrence.addEventListener(myListener);


  
Então vamos começar :D

crie um novo documento em branco ( caso esteja utilizando Flash CS3 selecione "action script 2.0" )
Como fazer uploads de arquivos utilizando FileRefernece

no Primeiro frame crie um TextField do tipo dynamic e com o nome tfOutput (esse textField será utilizado para monitorarmos o andamento do nosso upload)
Como fazer uploads de arquivos utilizando FileRefernece

crie também um botão e de a ele o nome de btUpload. // esse servirá para abrirmos a "caixa" para selecionar o arquivo para download
Como fazer uploads de arquivos utilizando FileRefernece

ainda no primeiro frame adicione o código abaixo.
Como fazer uploads de arquivos utilizando FileRefernece

import flash.net.FileReference;

// essa função servira para nos ajudar a entender os passos da nossa aplicação, e somente serve de apoio
function output(msg:String):Void {
    _root.tfOutput.text += msg+"n";
}
// Vamos definir o tipo de arquivo que "esperamos" receber
var fileTypes:Array = new Array();
var imageTypes:Object = new Object();
imageTypes.description = "Imagens (*.jpg, *.jpeg, *.gif, *.png)";
imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";
fileTypes.push(imageTypes);

// Criando e configurando o Listener do nosso objeto "FileReference"
var fileListener:Object = new Object();
fileListener.onCancel = function(file:FileReference):Void  {
    resultsTxtField.text += "upload cancelado";
};

fileListener.onSelect = function(file:FileReference):Void  {
    output("Arquivo selecionado: "+file.name);
    if (!file.upload("http://localhost/oficina/upload.php")) {
        output("Impossível selecionar arquivo.");
    }
};

fileListener.onOpen = function(file:FileReference):Void  {
    output("Abrindo Envio: "+file.name);
};

fileListener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void  {
    output("Progresso: enviado: "+bytesLoaded+", total: "+bytesTotal);
};

fileListener.onComplete = function(file:FileReference):Void  {
    output("Envio completo: "+file.name);
};

fileListener.onHTTPError = function(file:FileReference):Void  {
    output("Erro HTTP: "+file.name);
};

fileListener.onIOError = function(file:FileReference):Void  {
    output("Erro de Entrada/Saída: "+file.name);
};

fileListener.onSecurityError = function(file:FileReference, errorString:String):Void  {
    output("Erro de segurança: "+errorString);
};

// configurando o botão que ira iniciar o upload
btUpload.onRelease = function() {
    var fileReference:FileReference = new FileReference();
    fileReference.addListener(fileListener);
    fileReference.browse(fileTypes);
};





O PHP
para o arquivo que foi enviado para o servidor no PHP se utiliza a array global $_FILES que possui a seguinte estrutura.


$_FILES[ 'arquivo' ][ 'name' ]
//O nome original do arquivo que foi enviado.
  
$_FILES[ 'arquivo' ][ 'type' ]
//O tipo MIME do arquivo, por exemplo se for enviado uma imagem do tipo GIF ( ex.: computador.gif ) o MIME dela será 'image/gif'.
  
$_FILES[ 'arquivo' ][ 'size' ]
//O tamanho do arquivos que foi enviado.
  
$_FILES[ 'arquivo' ][ 'tmp_name' ]
//Um nome temporário que o PHP gera para o arquivo, esse nome é utilizado para acessar o arquivo que foi enviado.
  
$_FILES[ 'arquivo' ][ 'error' ]
//Um código que diz se ocorreu algum erro durante o upload desse arquivo.


o código do PHP vai ficar assim:

if(isset($_FILES[ 'Filedata' ]) && $_FILES[ 'Filedata' ][ 'error' ] == 0){
    $caminho_upload = $_FILES[ 'Filedata' ][ 'tmp_name' ];
    $caminho_salvar = "./files/".$_FILES[ 'Filedata' ][ 'name' ];
    // se o arquivo existe nos deletamos ele
    if(file_exists($caminho_salvar)){
        unlink($caminho_salvar);
    }
    // movemos o arquivo que foi enviado
    move_uploaded_file($caminho_upload, $caminho_salvar);

    // alteramos as permissões do arquivo para dar acesso total dos scripts
    chmod($caminho_salvar, 0777);
}
?>


nossa apresentação deve estar assim:
Como fazer uploads de arquivos utilizando FileRefernece

quando clicarmos no botão de upload devera aparecer uma caixa de dialogo para a seleção do arquivo.
Como fazer uploads de arquivos utilizando FileRefernece

quando o arquivo for selecionado o upload ira iniciar automaticamente e o progresso será mostra do no TextField
Como fazer uploads de arquivos utilizando FileRefernece

o (antes e depois) da pasta que eu estou guardando os arquivos ^^
antes
Como fazer uploads de arquivos utilizando FileRefernece

depois
Como fazer uploads de arquivos utilizando FileRefernece


Bom... é isso espero ter ajudado. ^^
qualquer duvida postem ai.

Mais sobre:
Share Tweet
Recomendado
Comentários
Carregar comentários
Destaquesver tudo

Siga nossas contas no Twitter