public function onBeforeSave($Event)
 {
     if (!$this->_check($Event)) {
         return true;
     }
     $model = $Event->subject();
     $storage =& $model->data[$model->alias];
     if (empty($storage['file'])) {
         if (isset($storage['path']) && empty($storage['filename'])) {
             $path = rtrim(WWW_ROOT, '/') . $storage['path'];
             $imageInfo = $this->__getImageInfo($path);
             $fp = fopen($path, 'r');
             $stat = fstat($fp);
             $storage['filesize'] = $stat[7];
             $storage['filename'] = basename($path);
             $storage['hash'] = sha1_file($path);
             $storage['mime_type'] = $imageInfo['mimeType'];
             $storage['width'] = $imageInfo['width'];
             $storage['height'] = $imageInfo['height'];
             $storage['extension'] = substr($path, strrpos($path, '.') + 1);
         }
         return true;
     }
     $file = $storage['file'];
     $filesystem = StorageManager::adapter($storage['adapter']);
     try {
         $raw = file_get_contents($file['tmp_name']);
         $key = sha1($raw);
         $extension = strtolower(FileStorageUtils::fileExtension($file['name']));
         $imageInfo = $this->__getImageInfo($file['tmp_name']);
         if (isset($imageInfo['mimeType'])) {
             $mimeType = $imageInfo['mimeType'];
         } else {
             $mimeType = $file['type'];
         }
         if (empty($storage['path'])) {
             $prefix = FileStorageUtils::trimPath(FileStorageUtils::randomPath($file['name']));
         }
         $fullpath = $prefix . '/' . $key . '.' . $extension;
         $result = $filesystem->write($fullpath, $raw);
         $storage['path'] = '/assets/' . $fullpath;
         $storage['filename'] = $file['name'];
         $storage['filesize'] = $file['size'];
         $storage['hash'] = sha1($raw);
         $storage['mime_type'] = $mimeType;
         $storage['width'] = $imageInfo['width'];
         $storage['height'] = $imageInfo['height'];
         $storage['extension'] = $extension;
         return $result;
     } catch (Exception $e) {
         $this->log($e->getMessage());
         return false;
     }
 }
Пример #2
0
 /**
  * Generates a semi-random file system path
  *
  * @param string $type
  * @param string $string
  * @param boolean $idFolder
  * @return string
  */
 public function fsPath($type, $string, $idFolder = true)
 {
     $string = str_replace('-', '', $string);
     $path = $type . DS . FileStorageUtils::randomPath($string);
     if ($idFolder) {
         $path .= $string . DS;
     }
     return $path;
 }
 /**
  * testRandomPath
  *
  * @return void
  */
 public function testRandomPath()
 {
     $result = FileStorageUtils::randomPath('someteststring');
     $this->assertEqual($result, '38' . DS . '88' . DS . '98' . DS);
 }