
Recuperando dados de um upload de arquivo
10/04/2016Essa dica é muito útil, pois em alguns casos é necessário recuperar informações de um arquivo que foi "upado" para o servidor, e gravar essas informações no banco.
O CodeIgniter tem uma biblioteca nativa chamada File Uploading para fazer o upload de arquivos, e esse upload é realizado através do método do_upload()
.
Ao realizar um upload através da biblioteca File Uploading, caso ele tenha ocorrido com sucesso, você pode recuperar os dados do arquivo "upado" através do método $this->upload()
, que retorna um array com as informações sobre o arquivo. Veja um exemplo dos dados retornados por esse método:
Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
file_name
: nome do arquivofile_type
: MIME type do arquivofile_path
: diretório onde o arquivo foi gravadofull_path
: caminho completo do arquivoraw_name
: nome do arquivo (sem extensão)orig_name
: nome original do arquivoclient_name
: nome final do arquivofile_ext
: extensão do arquivofile_size
: tamanho do arquivo (em Kb)is_image
: se é imagem (1 ou 0)image_width
: largura da imagemimage_height
: altura da imagemimage_type
: tipo da imagemimage_size_str
: string com as informações de largura e altura para inserir na tag<img>
;
Esses dados são retornados apenas se o upload foi executado com sucesso, sendo assim, você pode ver no código abaixo um exemplo de como verificar se um upload foi executado com sucesso ou não.
if (!$this->upload->do_upload('nome_do_input_file')) {
//Ocorreu um erro e o upload não foi processado.
} else {
//Upload processado com sucesso.
}
Você também consegue recuperar as informações de erro do upload, basta utilizar o método $this->upload->display_errors()
. Veja a seguir um código onde chamamos a recuperação de erro em caso de falha no upload ou recuperamos os dados do upload em caso de sucesso.
if (!$this->upload->do_upload('nome_do_input_file')) {
//Ocorreu um erro e o upload não foi processado.
$erros = $this->upload->display_errors();
} else {
//Upload processado com sucesso
$dadosImagem = $this->upload->data();
}
Com essas informações você pode gravá-las no banco de dados, retornar a URL da imagem para exibição em uma view e várias outras possibilidades, tudo vai depender das necessidades da sua aplicação.
Aproveite e veja também o tutorial Recortando imagens com as bibliotecas jCrop e Image Manipulation no CodeIgniter onde também é utilizada a biblioteca File Uploading.