Eu tenho um gestor de arquivos escrito em PHP e estou transferindo sua lógica pro CakePHP 2.1, deixando meu gestor orientado a objetos…
Ontem eu fui trabalhar com a parte que faz upload de um arquivo da máquina do usuário para o servidor, além de gravar alguns detalhes do arquivo no banco de dados. Minha maior dificuldade foi fazer isso usando os recursos que o CakePHP oferece, porque eu não os conhecia ainda.
Exemplo 1: eu geralmente desenvolvo no Linux, que para caminhos usa a barra /, mas ontem eu estava no Windows, que a barra é \. Como tratar isso??
Exemplo 2: eu estava usando funções do PHP para criar diretórios (mkdir), apagar diretórios (rmdir) e fazer o upload (move_uploaded_file). Como fazer isso com o CakePHP??
Duas páginas da documentação foram o ponta pé para tirar parte das minhas dúvidas:
http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html
Para poder tratar o lance de barras nos caminhos de diretórios, eu usei a constante DS. Tem gente que diz que é inútil fazer isso, mas por via das dúvidas, eu preferi colocar. Já quanto ao meu diretório de upload de arquivos, ele ficou em app/webroot/files – Para poder colocar esse caminho, meu código ficou assim:
1 |
WWW_ROOT.$localizacao.DS.$arquivo_nome |
Na variável $localizacao fica o que vier de /files para frente, pois a constante WWW_ROOT já me leva até webroot.
http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html
Então cheguei na parte que me gerou mais dúvida. O link acima tem todos os detalhes para trabalharmos com diretórios e arquivos, só que para mim, não fica claro exatamente como fazer o upload…
Buscando referências no Google, descobri que um dos fluxos possíveis para upload de arquivo no CakePHP é:
1 – Ler o arquivo
2 – Gravar os dados em uma variavel temporária
3 – Fechar o arquivo
4 – Iniciar um arquivo com o destino desejado
5 – Escrever nele os dados da variável temporária
6 – Fechar o novo arquivo
Veja como ficou meu código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// FAZ LEITURA DE DADOS DO ARQUIVO TEMPORARIO $arquivo = new File($this->request->data['arquivo']['tmp_name'],false); $dados = $arquivo->read(); $arquivo->close(); // PREPARA ARQUIVO REAL $arquivo = new File(WWW_ROOT.$localizacao.DS.$arquivo_nome,false,0755); if($arquivo->create()) { // ESCREVE ARQUIVO REAL $arquivo->write($dados); $arquivo->close(); } else { $this->Session->setFlash('Erro ao tentar fazer upload','msg_erro'); } |
Desta forma, o upload funcionou direitinho… Legal não é???
Olá, bom dia! Por favor, gostaria de saber como posso fazer o upload de um arquivo usando o form no CakePHP e salvar em um determinado diretório. A parte de salvar acho que poderia usar a que você explica aqui.
Elessandra, acesse a parte de contato aqui do Blog e me envie um email detalhando sua dúvida, assim posso te ajudar melhor! Abs
Olá!! Enviei o e-mail a você (ontem)!
Eu recebi =)
Vou dar uma olhada e te responder hoje, até o final do dia!
Muito bacana esse tutorial Heitor. Parabéns cara! Salvou.
Agora que começei a estudar cake mesmo. Agora vou tentar adotá-lo para meu desenvolvimento em php.
Um abrçao. Valeu!
Fez uma excelente escolha, na minha opinião!
Se quiser qualquer ajuda, me manda um email…
Parabéns, fiquei o dia inteiro procurando algo do tipo ate encontrar sua explicação, muito obrigado.
Obrigado! Espero que tenha ajudado…
Laravel apavora
Bom dia. Aqui nao conseguiu ler a formulário. Como faço?
Olá Emanuel! Como assim não leu o formulário?
Você diz isso:
$arquivo->read();
?