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.