示例#1
0
 /**
  * {@inheritDoc}
  * File may be \Symfony\Component\HttpFoundation\File\File or \Symfony\Component\HttpFoundation\File\UploadedFile
  */
 public function upload(PropertyMapping $mapping, File $file)
 {
     $originalName = $this->getOriginalName($file);
     $mimeType = $this->getMimeType($file);
     //transform filename and directory name if namer exists in mapping definition
     $fileName = $origName = $mapping->useFileNamer($originalName);
     list($directoryName, $path) = $mapping->useDirectoryNamer($fileName, $originalName);
     //check if file already placed in needed position
     if (!$this->isSameFile($file, array('dir' => $directoryName, 'fileName' => $fileName))) {
         $try = 0;
         while ($mapping->needResolveCollision() && file_exists($directoryName . '/' . $fileName)) {
             if ($try > 15) {
                 throw new \Exception("Can't resolve collision for file  " . $directoryName . '/' . $origName);
             }
             list($directoryName, $path, $fileName) = $mapping->resolveFileCollision($origName, $originalName, ++$try);
         }
         if ($file instanceof UploadedFile) {
             $file->move($directoryName, $fileName);
         } else {
             $this->copyFile($file->getPathname(), $directoryName, $fileName);
         }
     }
     $fileData = array('fileName' => $fileName, 'originalName' => $originalName, 'dir' => $directoryName, 'mimeType' => $mimeType, 'size' => filesize($directoryName . '/' . $fileName), 'path' => $path);
     // print_r ($fileData);
     //  exit();
     if (!$fileData['path']) {
         $fileData['path'] = substr($fileData['dir'], strlen($this->webDir)) . '/' . urlencode($fileName);
     }
     // $fileData['url'] = $fileData['path'] . '/' . $fileData['fileName'];
     if (in_array($fileData['mimeType'], array('image/png', 'image/jpeg', 'image/pjpeg')) && function_exists('getimagesize')) {
         list($width, $height, $type) = @getimagesize($fileData['dir'] . '/' . $fileData['fileName']);
         $fileData = array_merge($fileData, array('width' => $width, 'height' => $height));
     }
     return $fileData;
     // exit();
     // $mapping->getFileNameProperty()->setValue($obj, $name);
 }