CakePHP FileUpload Component

Fazendo upload facilmente com o CakePHP, isso é proposto com o FileUpload o download do código do componente pode ser feito aqui, o mesmo deve ser salvo dentro da pasta de sua aplicação em, controllers/components com o nome de file_upload.php.
Para usar o mesmo é muito simples no controller que vamos fazer o upload usamos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function beforeFilter() {
$this->FileUpload->fileModel = 'Attachment';
$this->FileUpload->fields = array('name'=> 'file_name',
'type' => 'file_type',
'size' => 'file_size');
$this->FileUpload->allowedTypes = array('image/jpeg',
'text/plain',
'image/png',
'application/msword',
'application/zip',
'image/gif',
'image/bmp',
'application/excel',
'application/pdf',
);
$this->FileUpload->uploadDir = 'files' . DS . 'attachments';
parent::beforeFilter();
}

Onde $this->FileUpload->fileModel é o modelo que referencia onde vai ser salvo as informações do arquivo do upload, caso não seja necessário salvar no banco passe null para esse atributo.
$this->FileUpload->fields se referencia as campos do banco de dados que vai salvar as informações do arquivo.
$this->FileUpload->allowedTypes um array com os tipos de mime types permitidos para fazer o upload.
$this->FileUpload->uploadDir diretório no file system onde deve ser salvo o arquivo.
No seu action de cadastramento teremos:

1
2
3
4
5
6
7
8
9
public function admin_add() {
if (!empty($this->data)) {
if ($this->Attachment->validates() && $this->FileUpload->success) {
$this->Session->setFlash(__('The Attachment has been saved', true));
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash(__('The Attachment could not be saved. Please, try again.', true));
}
} }

Para editar o mesmo processo pode ser usado.
Para deletar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function admin_delete($id = null) {
if (!$id) {
$this->Session->setFlash(__('Invalid id for Attachment', true));
$this->redirect(array('action'=>'index'));
}
$attachment = $this->Attachment->findById($id);
if ($this->FileUpload->removeFile($attachment['Attachment']['file_name'])){
if ($this->Attachment->del($id)) {
$this->Session->setFlash(__('Attachment deleted', true));
}
} else {
$this->Session->setFlash(__('Not found the file', true));
}
$this->redirect(array('action'=>'index'));
}