Example #1
0
 /**
  * {@inheritdoc}
  */
 public function create($productSku, GalleryEntry $entry, GalleryEntryContent $entryContent, $storeId = 0)
 {
     $store = $this->storeFactory->create()->load($storeId);
     if ($store->getId() != $storeId) {
         throw new NoSuchEntityException('There is no store with provided ID.');
     }
     if (!$this->contentValidator->isValid($entryContent)) {
         throw new InputException('The image content is not valid.');
     }
     $product = $this->productLoader->load($productSku);
     $fileContent = @base64_decode($entryContent->getData(), true);
     $mediaTmpPath = $this->mediaConfig->getBaseTmpMediaPath();
     $mediaDirectory = $this->filesystem->getDirectoryWrite(Filesystem::MEDIA_DIR);
     $mediaDirectory->create($mediaTmpPath);
     $fileName = $entryContent->getName() . '.' . $this->mimeTypeExtensionMap[$entryContent->getMimeType()];
     $relativeFilePath = $mediaTmpPath . DIRECTORY_SEPARATOR . $fileName;
     $absoluteFilePath = $mediaDirectory->getAbsolutePath($relativeFilePath);
     $mediaDirectory->writeFile($relativeFilePath, $fileContent);
     /** @var $productMediaGallery \Magento\Catalog\Model\Product\Attribute\Backend\Media */
     $productMediaGallery = $this->getGalleryAttributeBackend($product);
     $imageFileUri = $productMediaGallery->addImage($product, $absoluteFilePath, $entry->getTypes(), true, $entry->isDisabled());
     // Update additional fields that are still empty after addImage call
     $productMediaGallery->updateImage($product, $imageFileUri, array('label' => $entry->getLabel(), 'position' => $entry->getPosition(), 'disabled' => $entry->isDisabled()));
     $product->setStoreId($storeId);
     $product->save();
     // Remove all temporary files
     $mediaDirectory->delete($relativeFilePath);
     // File could change its name during the move from tmp dir
     return $this->entryResolver->getEntryIdByFilePath($product, $productMediaGallery->getRenamedImage($imageFileUri));
 }
Example #2
0
 /**
  * Construct
  *
  * @param \Magento\Framework\Logger $logger
  * @param \Magento\Catalog\Model\Resource\ProductFactory $productFactory
  * @param \Magento\Framework\Event\ManagerInterface $eventManager
  * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb
  * @param \Magento\Core\Helper\Data $coreData
  * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
  * @param \Magento\Framework\App\Filesystem $filesystem
  * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceProductAttribute
  */
 public function __construct(\Magento\Framework\Logger $logger, \Magento\Catalog\Model\Resource\ProductFactory $productFactory, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Core\Helper\Data $coreData, \Magento\Catalog\Model\Product\Media\Config $mediaConfig, \Magento\Framework\App\Filesystem $filesystem, \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceProductAttribute)
 {
     $this->_productFactory = $productFactory;
     $this->_eventManager = $eventManager;
     $this->_fileStorageDb = $fileStorageDb;
     $this->_coreData = $coreData;
     $this->_resourceModel = $resourceProductAttribute;
     $this->_mediaConfig = $mediaConfig;
     $this->_mediaDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem::MEDIA_DIR);
     $this->_mediaDirectory->create($this->_mediaConfig->getBaseMediaPath());
     $this->_mediaDirectory->create($this->_mediaConfig->getBaseTmpMediaPath());
     parent::__construct($logger);
 }
 /**
  * @return \Magento\Framework\Controller\Result\Raw
  */
 public function execute()
 {
     $baseTmpMediaPath = $this->mediaConfig->getBaseTmpMediaPath();
     try {
         $remoteFileUrl = $this->getRequest()->getParam('remote_image');
         $originalFileName = basename($remoteFileUrl);
         $localFileName = Uploader::getCorrectFileName($originalFileName);
         $localTmpFileName = Uploader::getDispretionPath($localFileName) . DIRECTORY_SEPARATOR . $localFileName;
         $localFileMediaPath = $baseTmpMediaPath . $localTmpFileName;
         $localUniqueFileMediaPath = $this->appendNewFileName($localFileMediaPath);
         $this->retrieveRemoteImage($remoteFileUrl, $localUniqueFileMediaPath);
         $localFileFullPath = $this->appendAbsoluteFileSystemPath($localUniqueFileMediaPath);
         $this->imageAdapter->validateUploadFile($localFileFullPath);
         $result = $this->appendResultSaveRemoteImage($localUniqueFileMediaPath);
     } catch (\Exception $e) {
         $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
     }
     /** @var \Magento\Framework\Controller\Result\Raw $response */
     $response = $this->resultRawFactory->create();
     $response->setHeader('Content-type', 'text/plain');
     $response->setContents(json_encode($result));
     return $response;
 }
 /**
  * {@inheritdoc}
  */
 public function create($product)
 {
     try {
         $this->storeManager->getStore($product->getStoreId());
     } catch (\Exception $exception) {
         throw new NoSuchEntityException(__('There is no store with provided ID.'));
     }
     /** @var $entry ProductAttributeMediaGalleryEntryInterface */
     $entry = $product->getCustomAttribute('media_gallery')->getValue();
     $entryContent = $entry->getContent();
     if (!$this->contentValidator->isValid($entryContent)) {
         throw new InputException(__('The image content is not valid.'));
     }
     $product = $this->productRepository->get($product->getSku());
     $fileContent = @base64_decode($entryContent->getEntryData(), true);
     $mediaTmpPath = $this->mediaConfig->getBaseTmpMediaPath();
     $mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA);
     $mediaDirectory->create($mediaTmpPath);
     $fileName = $entryContent->getName() . '.' . $this->mimeTypeExtensionMap[$entryContent->getMimeType()];
     $relativeFilePath = $mediaTmpPath . DIRECTORY_SEPARATOR . $fileName;
     $absoluteFilePath = $mediaDirectory->getAbsolutePath($relativeFilePath);
     $mediaDirectory->writeFile($relativeFilePath, $fileContent);
     /** @var $productMediaGallery \Magento\Catalog\Model\Product\Attribute\Backend\Media */
     $productMediaGallery = $this->getGalleryAttributeBackend($product);
     $imageFileUri = $productMediaGallery->addImage($product, $absoluteFilePath, $entry->getTypes(), true, $entry->isDisabled());
     // Update additional fields that are still empty after addImage call
     $productMediaGallery->updateImage($product, $imageFileUri, ['label' => $entry->getLabel(), 'position' => $entry->getPosition(), 'disabled' => $entry->isDisabled()]);
     try {
         $this->productRepository->save($product);
     } catch (\Exception $e) {
         throw new StateException(__('Cannot save product.'));
     }
     // Remove all temporary files
     $mediaDirectory->delete($relativeFilePath);
     // File could change its name during the move from tmp dir
     return $this->entryResolver->getEntryIdByFilePath($product, $productMediaGallery->getRenamedImage($imageFileUri));
 }
 /**
  * @param string $localTmpFile
  * @return string
  */
 protected function appendFileSystemPath($localTmpFile)
 {
     $pathToSave = $this->mediaConfig->getBaseTmpMediaPath();
     return $pathToSave . $localTmpFile;
 }