/**
  * {@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
     list($fileName, $webPath) = $mapping->prepareFileName($originalName, $this);
     $fullFileName = $mapping->resolveFileName($fileName);
     //check if file already placed in needed position
     if (!$this->isSameFile($file, $fullFileName)) {
         $fileInfo = pathinfo($fullFileName);
         if ($file instanceof UploadedFile) {
             $this->checkDirectory($fileInfo['dirname']);
             $file->move($fileInfo['dirname'], $fileInfo['basename']);
         } else {
             $this->copyFile($file->getPathname(), $fileInfo['dirname'], $fileInfo['basename']);
         }
     }
     $fileData = array('fileName' => $fileName, 'originalName' => $originalName, 'mimeType' => $mimeType, 'size' => filesize($fullFileName), 'path' => $webPath);
     if (!$fileData['path']) {
         $fileData['path'] = substr($fullFileName, strlen($this->webDir));
     }
     $ext = substr($originalName, strrpos($originalName, '.') + 1);
     if ((in_array($fileData['mimeType'], array('image/png', 'image/jpeg', 'image/pjpeg')) || in_array($ext, array('jpeg', 'jpg', 'png'))) && function_exists('getimagesize')) {
         list($width, $height, $type) = @getimagesize($fullFileName);
         $fileData = array_merge($fileData, array('width' => $width, 'height' => $height));
     }
     return $fileData;
 }