Пример #1
0
 /**
  * Salva um arquivo dentro da pasta específica
  * @param $file
  * @param $file_name
  * @param $directory
  * @return boolean
  */
 public function upload(CUploadedFile $file, $file_name = NULL, $directory = NULL)
 {
     /**
      * Para cada item do array de configuração de corte
      * o método tratará a imagem como configurado
      */
     try {
         Yii::log("CApiFileManager ::: INICIANDO O ARMAZENAMENTO DO ARQUIVO ");
         if (!is_dir($this->upload_path)) {
             $const_path = ABSOLUTE_PATH_UPLOAD;
             throw new CHttpException(500, "O diretório de upload de arquivo é inválido {$const_path} | {$this->upload_path}");
         }
         $caminho = $this->upload_path;
         if (!is_null($directory)) {
             // $array_directory= explode('/', $directory);
             // @todo Testar código abaixo para garantir integridade das pastas
             /**
              * foreach($array_directory as $dir_name)
              * 		$dir_name= normalize($dir_name)
              * 
              * $directory= implode('/', $array_directory);
              */
             /*
              * Verificar se o diretório não existe: Caso não exista, criar este diretório
              */
             if (!is_dir("{$caminho}/{$directory}/")) {
                 $novo_caminho = @mkdir("{$caminho}/{$directory}/", 0777, true);
                 if (!$novo_caminho) {
                     throw new Exception("Falha ao criar diretorio {$caminho}/{$directory}/");
                 }
                 $caminho = "{$caminho}/{$directory}/";
             } else {
                 $caminho = "{$caminho}/{$directory}/";
             }
         }
         // Atualizar a variavel com o novo caminho de upload
         $this->upload_path = $caminho;
         if (is_null($file_name)) {
             $nome_do_arquivo = $this->getNewFileName($file);
         } else {
             $nome_do_arquivo = $this->normalize($file_name);
         }
         $caminho_para_salvar_arquivo = "{$caminho}/{$nome_do_arquivo}";
         if (!$file->saveAs($caminho_para_salvar_arquivo)) {
             throw new Exception("Falha ao salvar arquivo como {$caminho}/{$nome_do_arquivo}");
         }
         // A rotina abaixo deve ser realizada somente em casos de imagem
         if (in_array($file->getType(), array("image/gif", "image/png", "image/bmp", "image/jpeg", "image/tiff"))) {
             Yii::import("application.components.SystemService.lib.*");
             foreach ($this->image_crop_configuration as $crop_configuration) {
                 $thumb = new imageUpload("{$caminho}/{$nome_do_arquivo}");
                 if (array_key_exists("width", $crop_configuration)) {
                     $thumb->size_auto($crop_configuration["width"]);
                 }
                 $thumb->jpeg_quality($crop_configuration["quality"]);
                 $thumb->save("{$caminho}/{$crop_configuration['prefix']}{$nome_do_arquivo}");
                 Yii::log("CApiFileManager ::: O arquivo {$crop_configuration['prefix']}{$nome_do_arquivo} foi mantido no disco");
             }
             if (!$this->keep_original_image_file) {
                 // A imagem original deve ser removida após os cortes serem executados
                 $this->delete($nome_do_arquivo, $directory);
             }
         } else {
             Yii::log("CApiFileManager ::: O arquivo nao possui um tipo permitido");
         }
     } catch (Exception $e) {
         Yii::log("CApiFileManager ::: {$e->getMessage()} ");
         return false;
     }
     $this->file_name = $nome_do_arquivo;
     return true;
 }