Files – upload

Wgranie pliku na serwer

$project= $this->fetchTable("Projects")->get($id);   // zamiast loadModel

Config/paths

define('FILES_DIR', ROOT.DS.'files'.DS);         // Katalog na Pliki
define('MAX_FILESIZE', 20971520);                // rozmian 20MB   (30 MB = 31457280 B)

FilesController / add

public function add($model_name = '', $model_id = null, $category = "")
{
   $file = $this->Files->newEmptyEntity();
   $model = null;

   if($this->request->is('post')) {
      if($model_name && $model_id) {
        $model = $this->fetchTable($model_name)->get($model_id);
        if(!$model) {
            $this->Flash->error(__('Niepoprawny moduł.'));
            return $this->redirect($this->request->referer());
        }
     } else {
        $this->Flash->error(__('Nie podano danych modułu.'));
        return $this->redirect($this->request->referer());
     }

     $data = $this->request->getData('filename');

     if($data->getError()) {
        $this->Flash->error(__('Nie można wgrać pliku: '. $data->getError()));
        return $this->redirect($this->request->referer(), ['name' => '_start']);
     }

     $filename = md5(uniqid('_', true));  // nazwa na dysku - wygenerowana losowa
     $filetypes  = ['pdf', 'pdfx', 'doc', 'docx', 'txt', 'xls', 'xlsx',
                    'ppt', 'pptx', 'jpg', 'png', 'dwg', '7z', 'rar', 'zip' ];

     $orygname  = $data->getClientFileName();
     $ext       = substr(strtolower(strrchr($orygname, '.')), 1);

     $no_errors = true;
     if( $data->getSize() > MAX_FILESIZE) {
        $this->Flash->error(__('Zbyt duży plik. Max rozmiar: '. (MAX_FILESIZE / 1048576) .' MB'));  // 20MB
         $no_errors = false;
      }

      if(! in_array($ext, $filetypes) ) {
         $this->Flash->error(__('Nieobsługiwany typ pliku. Zgłoś do administratora.'));
         $no_errors = false;
       }

    if( $no_errors ) {
       $path = FILES_DIR . $filename;
       $data->moveTo($path);

       $file->model_name = $model_name;
       $file->model_id   = $model->id;
       $file->category   = $category;
       $file->user_id    = $this->user_id;
       $file->orygname   = $orygname;
       $file->filename   = $filename;
       $file->dir        = $path;
       $file->ext        = $ext;

       if ( $this->Files->save($file) ) {
         $this->Flash->success(__('Plik wgrany.'));
         return $this->redirect(['prefix' => false, 'controller' => $file->model_name, 
                'action' => 'view', $file->model_id]);
       } else {
         $this->Flash->success(__('Nie udało się zapisać danych pliku.'));
         unlink($path);
       } // save
    } // errors
  } // post
  return $this->redirect($this->request->referer());
} // add