FuelPHP - Upload de arquivo

O upload de arquivos é um dos recursos mais usados ​​na programação de formulários. FuelPHP oferece uma classe especial,Uploadpara lidar com o upload de arquivos. Vamos aprender como fazer upload de um arquivo usando a classe Upload neste capítulo.

Configuração

A classe de upload pode ser configurada usando um arquivo de configuração separado, fuel/app/config/upload.php. As entradas de configuração importantes são as seguintes -

  • max_size- Defina o tamanho máximo do arquivo a ser carregado. “0” refere-se ao tamanho de upload ilimitado

  • ext_whitelist - Definir extensões de arquivo permitidas

  • ext_blacklist - Definir extensões de arquivo não permitidas

  • type_whitelist- Defina os tipos de arquivo permitidos. Por exemplo, “texto” para tipo MIME “texto / simples”

  • type_blacklist - Definir tipos de arquivo não permitidos

  • mime_whitelist- Defina os tipos de arquivo MIME permitidos. Por exemplo, “texto / simples”

  • mime_blacklist - Definir tipos de arquivo MIME não permitidos

  • prefix - String para prefixar no nome do arquivo ao salvar o arquivo enviado para o servidor

  • suffix - String para sufixo no nome do arquivo ao salvar o arquivo carregado no servidor

  • extension - Extensão do arquivo carregado a ser definido

  • create_path - Se deve criar o caminho do arquivo, se não estiver disponível

  • overwrite - Substituir o arquivo existente ao salvar o arquivo carregado

  • auto_rename - Se deve renomear o arquivo adicionando um número de sequência enquanto salva o arquivo carregado

  • randomize - Se deve criar um nome aleatório de 32 caracteres para salvar o arquivo enviado

Métodos de upload

A classe de upload oferece opções para processar e salvar o arquivo carregado pelos usuários. Cada arquivo processado (antes de salvar) terá as seguintes informações na matriz de resultado.

  • field - Nome do campo do formulário

  • name - Nome do arquivo enviado

  • type - Tipo de arquivo conforme definido pelo navegador

  • mimetype - Tipo de arquivo conforme definido pela classe Upload

  • file - Nome totalmente qualificado da localização temporária do arquivo carregado

  • filename - Nome do arquivo enviado

  • extension - Extensão do arquivo enviado

  • size - Tamanho do arquivo enviado em bytes

  • errors - Matriz de erro com código e mensagem de erro

  • error - Definir erros de array explicando por que o upload falha (em caso de falha no upload)

Assim que os arquivos forem salvos no servidor, a matriz de resultados também terá as seguintes informações.

  • saved_to - Caminho totalmente qualificado onde o arquivo enviado foi salvo

  • saved_as - Nome do arquivo que foi salvo

  • errors - Matriz de erro atualizada

Agora, vamos ver o método da classe Upload.

é válido

is_valid retorna verdadeiro, se qualquer arquivo válido for carregado pelo usuário.

// do we have any uploaded files to save? 
if (Upload::is_valid()) { 
   // process  
}

get_files

get_files retorna todos os arquivos carregados como um array multidimensional. Se um índice / nome da entrada de arquivo do formulário for especificado, ele retornará o arquivo carregado relacionado apenas à entrada de arquivo especificada.

foreach(Upload::get_files() as $file) { 
   // do something with the file info 
}  
if ( Upload::get_files(0)) { 
   // do something 
}

get_errors

get_errors retorna uma matriz de erros, se houver uma falha no upload de um ou mais arquivos. Se um índice / nome do nome de entrada do arquivo do formulário for especificado, ele retornará o erro relacionado apenas à entrada do arquivo especificado.

foreach(Upload::get_errors() as $file) { 
   // do something with the file info 
}  
if (Upload::get_errors('myimage')) { 
   // do something 
}

Processo

processo refere-se ao processo real de coleta de informações sobre o arquivo carregado. Podemos fornecer uma nova configuração personalizada usando array. Se nenhuma configuração for especificada, ele usará a configuração definida em fuel / app / config / upload.php

Upload::process (array( 
   'auto_rename' => false, 
   'overwrite'   => true 
));

Salve 

salvar refere-se ao processo real de salvar todos os arquivos validados em um local apropriado. Podemos especificar o índice para salvar apenas essa entrada particular.

Upload::save();
Upload::save(0);
Upload::save(0, 3);

Exemplo de Trabalho

Vamos criar um novo controlador, Controller_Upload em nosso exemplo de funcionário para testar a funcionalidade de upload.

Step 1 - Crie um arquivo, fuel/app/classes/controller/upload.php. Crie um controlador de upload.

<?php 
   class Controller_Upload extends Controller { 
   }

Step 2 - Crie uma nova ação get_upload.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }

Step 3 - Crie uma nova visão para a ação criada.

<!DOCTYPE html> 
<html> 
   <body> 
   
      <form action = "/upload/index" method = "post" enctype = "multipart/form-data"> 
         Select image to upload: 
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form>  
      
   </body> 
</html>

Step 4 - Crie uma nova ação post_action para processar o arquivo carregado.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      }  
      public function post_index(){ 
         $config = array( 
            'path' => DOCROOT.'files', 
            'randomize' => true, 
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), 
         );  
         Upload::process($config);  
         // if there are any valid files 
         
         if (Upload::is_valid()) { 
            Upload::save(); 
            echo "success"; 
         } else { 
            // and process any errors 
            foreach (Upload::get_errors() as $file) { 
               echo var_dump($file); 
            } 
         } 
      } 
   }

Por fim, execute o aplicativo solicitando o url, http://localhost:8080/upload/index e tente fazer o upload do arquivo.

Resultado