Upload de arquivo no CodeIgniter

Hallo,

Atendendo ao pedido feito em um comentário, o tema deste post será sobre como fazer upload de arquivos usando o CI.
Veremos que o CI nos fornece uma interface bem limpa e clara, que é capaz de fazer este trabalho facilmente.

Primeiramente, vamos criar o nosso formulário de envio do arquivo que desejamos.
Teremos o código a seguir:

<html>
<head>
<title>Formul&aacute;rio de Envio de Arquivo</title>
</head>
<body>
        <?php echo form_open_multipart('upload/enviar'); ?>
        <input type="file" name="arquivo" id="arquivo" size="20" />
        <br>
        <input type="submit" value="Enviar" />
</body>
</html>

A função form_open_multipart() cria um form na nossa view que suportará o upload.
Esta função adiciona um atributo multipart na tag form, que é necessário para fazermos o upload de arquivos.

Nosso Controller será o responsável por fazer o upload do arquivo em si, e direcionar para uma página de sucesso ou de erro, caso nosso upload funcione ou não.

<?php
        class Upload extends CI_Controller{
               
                function __construct(){
                        parent::__construct();
                        $this->load->helper(array('form'));
                }
               
                function index(){
                        $this->load->view('upload/form_upload');
                }
               
                function enviar(){
                        //Configurações necessárias para fazer upload do arquivo
                       
                        //Pasta onde será feito o upload
                        $config['upload_path'] = './uploads/';
                        //Tipos suportados
                        $config['allowed_types'] = 'gif|jpg|png';
                        //Configurando atributos do arquivo imagem que iremos receber
                        $config['max_size']     = '100';
                        $config['max_width']  = '1024';
                        $config['max_height']  = '768';
       
                        //Carregando a lib com as configurações feitas
                        $this->load->library('upload', $config);
                       
                        //Fazendo o upload do arquivo e direcionando para a view de erro ou de sucesso
                        if( ! $this->upload->do_upload('arquivo')){
                                $error = array('error' => $this->upload->display_errors());
       
                                $this->load->view('upload/erro', $error);
                        }
                        else
                        {
                                $data = array('arquivo_data' => $this->upload->data());
                                $this->load->view('upload/sucesso', $data);
                        }
                }
        }
?>

E por fim, nossas páginas de Sucesso e Erro:

<html>
<head>
<title>Sucesso!</title>
</head>
<body>
 
<ul>
 
<?php foreach ($arquivo_data as $item => $valor) {?>
        <li><?php echo $item;?>: <?php echo $valor;?></li>
<?php } ?>
 
</ul>
 
<p><?php echo anchor('upload', 'Enviar outro arquivo!'); ?></p>
 
</body>
</html>
<html>
<head>
<title>ERRO!</title>
</head>
<body>
        <h3>Erro:</h3>
        <?php echo $error;?>
</body>
</html>

Também é necessário criar uma nova pasta dentro na raiz do nosso projeto chamada uploads, pois o upload path foi configurado para lá no nosso Controller.

_

Assim, chegamos ao fim de mais um post. Quaisquer dúvidas podem ser feitas nos comentários que eu tentarei ajudá-los.
Um abraço à todos! 8)

Anúncios

17 comentários em “Upload de arquivo no CodeIgniter”

  1. Estou com um problema no upload esta retornando o erro de que meu diretorio não é valido, criei a pasta la na raiz do projeto, ja alterei o $config[‘upload_path’] para “./logos/” para “/logo/” e tbm estou colocando o caminho absoluto e mesmo assim continua retornando o mesmo erro, eu dei um print no $this->upload->data(‘userfile’) ele me retorna o array com os campos vazios tbm, como se nao estivesse enviando o arquivo tbm…

    1. Fala Yuri,
      1) Como está a sua estrutura de diretórios do projeto?
      2)A pasta “logo” criada está com permissão de escrita?
      Pois, a documentação do CI temos isso:
      “The folder must be writable and the path can be absolute or relative.”
      3) Qual o o nome do “id” do input file?

      Dá uma olhadinha direito, pois já fiz este post há mais de um ano e nunca tive nenhuma dúvida do tipo.

      Nice codes!

    1. Opa. Bom dia!
      Ainda não tive nenhum problema usando, pois não implementei nada com acentuação. Fiz esse post apenas como estudo. Mas dando uma pesquisada rápida aqui acho que a solução seria definir o charset como utf8 nas suas páginas utilizando a função ini_set(‘default_charset’,’UTF-8′); do PHP.

      Não tenho como testar no momento, mas se tiver ajudado dá um feedback aqui, beleza?

      Abs.

  2. Boa tarde Henrique Luiz, muito obrigado pela contribuição e como eu faria para antes do upload deste arquivo eu mudar o nome do mesmo por exemplo 36446865_20130607_alfredoluiz.jpg?

    Abcs

    1. Oi Antônio, você pode alterar o nome do arquivo setando o parâmetro:
      $config[‘file_name’] = “novo_nome” //sem a extensão
      Antes de fazer o upload do arquivo.

      Valeu!

      1. estou utilizando o ‘file_name’ depois de setar o diretorio e a extensão do arquivo. não tenho a permissão de colocar o codigo, mais posso te dizer que é um arquivo com nome_12345.txt e ao utilizar o arquivo eu preciso ler o nome do arquivo antes de utilizá-lo, já avia realizado isso anteriormente mas estamos testando em Code…

      2. Ok, acho que entendi.
        Dentro do bloco else tenta fazer o seguinte para ler o nome do arquivo que você tá fazendo o upload:
        $upload_data = $this->upload->data();
        $file_name = $upload_data['file_name'];

        Depois fala se funcionou. 🙂

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s