/** * Retrieve a file content from a virtual file system. * In case no filesystem has this file registered, null is returned. * * @param string $path * * @throws NotLoadableException * * @return Binary|null|string */ protected function retrieveContentFileFromVfs($path) { $content = null; $mimeType = null; foreach ($this->filesystemAliases as $alias) { $fs = $this->filesystemProvider->getFilesystem($alias); if ($fs->has($path)) { //TODO: we should use readStream, the problem is that // \Liip\ImagineBundle\Model\Binary expects the full content... $content = $fs->read($path); $mimeType = $fs->getMimetype($path); } } if (null === $content) { // the path is not stored on any vfs return null; } if (false === $content) { throw new NotLoadableException(sprintf('Unable to read the file "%s" from the filesystem.', $path)); } if (false === $mimeType || null === $mimeType) { return $content; } return new Binary($content, $mimeType); }
/** * @param ProductInterface $fromProduct * @param ProductInterface $toProduct * @param AttributeInterface $fromAttribute * @param AttributeInterface $toAttribute * @param string $fromLocale * @param string $toLocale * @param string $fromScope * @param string $toScope */ protected function copySingleValue(ProductInterface $fromProduct, ProductInterface $toProduct, AttributeInterface $fromAttribute, AttributeInterface $toAttribute, $fromLocale, $toLocale, $fromScope, $toScope) { $fromValue = $fromProduct->getValue($fromAttribute->getCode(), $fromLocale, $fromScope); if (null !== $fromValue) { $toValue = $toProduct->getValue($toAttribute->getCode(), $toLocale, $toScope); if (null === $toValue) { $toValue = $this->productBuilder->addProductValue($toProduct, $toAttribute, $toLocale, $toScope); } $file = null; if (null !== $fromValue->getMedia()) { $filesystem = $this->filesystemProvider->getFilesystem(FileStorage::CATALOG_STORAGE_ALIAS); $rawFile = $this->fileFetcher->fetch($filesystem, $fromValue->getMedia()->getKey()); $file = $this->fileStorer->store($rawFile, FileStorage::CATALOG_STORAGE_ALIAS, false); $file->setOriginalFilename($fromValue->getMedia()->getOriginalFilename()); } $toValue->setMedia($file); } }
/** * Fetch a media to the target * * @param array $media */ protected function fetch(array $media) { try { $filesystem = $this->filesystemProvider->getFilesystem($media['storage']); $this->mediaFetcher->fetch($filesystem, $media['from'], $media['to']); } catch (FileTransferException $e) { $this->addError($media, sprintf('The media has not been found or is not currently available', $e->getMessage())); } catch (\LogicException $e) { $this->addError($media, sprintf('The media has not been copied. %s', $e->getMessage())); } }
/** * @param string $filename * * @throws NotFoundHttpException * * @return StreamedFileResponse */ public function downloadAction($filename) { $filename = urldecode($filename); foreach ($this->filesystemAliases as $alias) { $fs = $this->filesystemProvider->getFilesystem($alias); if ($fs->has($filename)) { $stream = $fs->readStream($filename); $headers = []; if (null !== ($fileInfo = $this->fileInfoRepository->findOneByIdentifier($filename))) { $headers['Content-Disposition'] = sprintf('attachment; filename="%s"', $fileInfo->getOriginalFilename()); } return new StreamedFileResponse($stream, 200, $headers); } } throw new NotFoundHttpException(sprintf('File with key "%s" could not be found.', $filename)); }
function let(FilesystemProvider $filesystemProvider, FilesystemInterface $filesystem) { $filesystemProvider->getFilesystem(FileStorage::CATALOG_STORAGE_ALIAS)->willReturn($filesystem); $this->beConstructedWith($filesystemProvider, [FileStorage::CATALOG_STORAGE_ALIAS]); }