Пример #1
0
 /**
  * @param UploadedFile|null $uploadedFile
  * @param array $options
  * @return AssetFile
  */
 public function handleUpload(UploadedFile $uploadedFile = null, array $options = [])
 {
     $resolver = new OptionsResolver();
     $resolver->setDefaults(['type' => null, 'fallbackType' => null, 'targetUri' => null])->setAllowedTypes(['type' => ['string', 'null'], 'fallbackType' => ['int', 'null'], 'targetUri' => ['string', 'null']])->setAllowedValues(['type' => ['image', 'audio', 'file', null]]);
     $options = $resolver->resolve($options);
     if (!$uploadedFile instanceof UploadedFile || !$uploadedFile->isValid() || !($assetFile = new AssetFile($uploadedFile, null, $options['fallbackType'])) || $assetFile->getType() === null) {
         throw new \RuntimeException('Invalid uploaded file');
     }
     $assetFile->setOriginalName($uploadedFile->getClientOriginalName());
     if ($options['type'] !== null) {
         $this->validateAssetFileType($assetFile, $options['type']);
     }
     if ($options['targetUri'] !== null) {
         $uploadsDir = $this->assetsResolver->uriToPath($options['targetUri']);
     } else {
         $uploadsDir = $this->assetsResolver->assetPath($assetFile->getType());
     }
     $tempFile = $uploadedFile->move($uploadsDir, $this->getTargetFileName($uploadedFile->getClientOriginalName(), $uploadsDir));
     $assetFile->setFile($tempFile);
     $uri = $this->assetsResolver->pathToUri($assetFile->getFile()->getPathname());
     if ($uri === null) {
         throw new \RuntimeException('Unable to retrieve uploaded file uri');
     }
     $assetFile->setUri($uri);
     return $assetFile;
 }
Пример #2
0
 /**
  * @param string $imageName
  * @return ImagePreview
  */
 private function extractPreviewData($imageName)
 {
     // example: name_500x300.png
     $regexp = '/(?<name>[^\\/]*?)(_(?<width>\\d+)x(?<height>\\d+))?(\\.(?<extension>[0-9a-z]+))$/i';
     preg_match($regexp, $imageName, $imageNameParts);
     $requiredKeys = ['name', 'width', 'height', 'extension'];
     foreach ($requiredKeys as $key) {
         if (!isset($imageNameParts[$key])) {
             throw new \InvalidArgumentException(sprintf("Info about '%' can't be extracted from image name '%s'", $key, $imageName));
         }
     }
     $sourcePath = $this->assetsResolver->assetUri(AssetFile::TYPE_IMAGE) . '/' . $imageNameParts['name'] . '.' . $imageNameParts['extension'];
     $imagePreviewData = new ImagePreview();
     $imagePreviewData->setSourceUri($sourcePath)->setTargetName($imageName)->setWidth($imageNameParts['width'])->setHeight($imageNameParts['height']);
     return $imagePreviewData;
 }