FIleUploader behavior para CakePHP

Uma tarefa que normalmente é recorrente em aplicações de variados tamanhos é o upload de arquivos. Também é comum que a tarefa se resuma em simples passos:

  1. O usuário inicia o upload
  2. Verifica-se se algum arquivo chegou ao servidor
  3. Procura-se por erros ou fraudes no arquivo enviado
  4. Armazena-se o arquivo em um diretório no servidor

Podem existir passos intermediários, como um processamento dependente do arquivo enviado, mas são casos mais específicos.

Como desenvolvedor, sempre tive que fazer o upload com esse cenário se repetindo em diversos projetos. Até que em um determinado momento decidi fazer o meu próprio Behavior [1] de upload para CakePHP.

Ele é simples e genérico o bastante para me atender na maioria dos projetos, espero que sirva para vocês também. Aqui está o link do dele no Github [2].

Basicamente o behavior segue os passos descritos acima, mas com um detalhe importante: ele é melhor utilizado com o recurso de Media Views [3]. Para quem não conhece é um modo de envio de arquivos ao browser que não passa pelo webroot. Também é possível utilizar o Behavior sem as Media Views, o que necessita de uma configuração adicional. Falando nela, aqui vai um exemplo de como utilizar o Behavior.


<?php
    //configurações no modelo
    Class MyModel extends AppModel
    {
        public $&;actsAs = array('FileUpload' => array(
                'uploadRoot' => 'media', //relativo ao APP, media é o valor default. Para utilizar img dentro de webroot, utilize webroot . DS . img
                'uploadPath' => 'images' . DS . 'users' //pasta dentro de uploadMedia
            )
        );
    }
    
    //realizando o upload no Controller
    Class MyController extends AppController
    {
        public function MyAction()
        {
            $&;upload = $&;mimetypes = array('jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg');
            $&;this->MyModel->upload($&;this->request->data['MyFile'], $&;mimetypes);
            /*
            * Neste ponto a variavel upload é um array com as seguintes chaves (úteis para utilizar media views)
            * status: bool com status da operação 
            * mimetype: string com mimetype do arquivo enviado
            * extension: string com extensão do arquivo enviado
            * filename: string com nome do arquivo enviado no server
            * md5: string com md5 do arquivo enviado
            * message: string com mensagem em caso de erro
            */
            if ($&;upload['status'])
            {
                //faça algo legal
            }
            else
            {
                //utilize a mensagem de erro do behavior
            }
        }
    }
?>

A configuração no modelo é bem simples, utiliza somente duas variáveis, sendo uma opcional. O diretório padrão (uploadRoot) de upload é relativo ao constante APP do CakePHP, e seu valor é media. Se deseja realizar uploads no webroot, será necessário definir o caminho relativo ao APP, por exemplo, webroot . DS . img para imagens. Já a chave uploadPath define o diretório em que os arquivos serão armazenados, relativos ao uploadRoot. Por exemplo, os arquivos com as imagens dos perfis dos usuários no diretório users.

Para realizar o upload basta uma linha de código chamando o método upload que recebe dois parâmetros: primeiro o array que armazena o arquivo (será um array igual ao $_FILES [4]) e o segundo é um array com os tipos de arquivo permitidos, no formato array(‘extensão’ => ‘mimetype’). O Behavior realiza uma verificação de segurança utilizando o mimetype dos arquivos enviados.

É isso pessoal, quem tiver dúvidas de utilização é só perguntar. Fiquem a vontade para fazer seus forks e adequar o projeto para suas necessidades.

  1. Behaviors
  2. FileUpload Behavior
  3. Media Views
  4. Documentação do PHP para o $_FILES

Sobre o livro “Almanaque das drogas”

Logo na capa do livro, além do título será encontrada a seguinte informação: um dia informal para o debate racional. Neste instante o autor deixa clara sua proposta e não faz com que o leitor espere mais do que o livro tem a oferecer. Por isso, acredito ser muito difícil se decepcionar com o trabalho de Tarso Araujo.

O livro é divido em seis partes:

  • O básico
  • História
  • Economia
  • Saúde
  • Política
  • Drogas de A a Z

Todas as divisões são desenvolvidas com bastante cuidado e se mostraram bastante úteis pois facilitam o foco de pensamento do leitor. Aos poucos elas vão atacando mitos e revelando informações que certamente irão alterar o pensamento de quem lê. Umas das partes mais interessantes está na divisão economia, quando o autor trata sobre o tráfico de drogas. A quantidade de conteúdo e detalhes fornecidos mostra que o problema é maior e mais complicado que a maioria de nós pode imaginar.

Além de ser muito bem escrito o livro constantemente apresenta dados para comprovar seus pontos, muitos em forma de infográficos, facilitando ainda mais a compreensão. Outro ponto notável é a quantidade de referências utilizadas e citadas diretamente no ponto de utilização (como em trabalhos científicos). Por ser um assunto polêmico, fornecer as fontes de informação deixa claro que as informações não são baseadas em achismos ou crenças pré-estabelecidas.

Recomendaria esse livro para qualquer um interessado em saber mais sobre o assunto, mas acredito que ele seja importante para qualquer pessoa, pois as drogas fazem parte do cotidiano de todos (se você não acha isso verdade, leia o livro). Os pais preocupados em manter os filhos longe dos problemas que elas podem causar, meus amigos programadores que não conseguem largar o cigarro e café, aquele amigo do happy hour, o curioso que quer experimentar uma viagem nova, o viciado e principalmente o desinformado. Conhecendo as informações do livro acredito que o debate e a compreensão geral do assunto irá melhorar infinitamente. No meu caso, me deixou mais curioso para me informar mais sobre o assunto.

Como o assunto está em moda e novas informações estão surgindo a todo momento, o autor utiliza um blog [1] para comentar novidades que não estão no livro. Uma atitude muito interessante, pois é capaz de gerar ainda mais conhecimento, uma vez que os comentários estão abertos aos visitantes. Boa leitura!

  1. Blog do livro