Hello,
I'm running Magento 2.2.4 and try to import a product through a script which does something like this:
<?php require_once 'app/bootstrap.php'; $imageFileName = '/var/www/html/pub/media/pic1.jpg'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); $objectManager->get(\Magento\Framework\Registry::class)->register('isSecureArea', true, true); $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); $productRepo = $objectManager->get(\Magento\Catalog\Model\ProductRepository::class); $product = $objectManager->create(\Magento\Catalog\Model\Product::class); $product->setSku('123'); $product->setName('123'); $product->setPrice("19.99"); $product->setTypeId('simple'); $product->setAttributeSetId(4); $product->addImageToMediaGallery($imageFileName, ['image', 'small_image', 'thumbnail'], true, false); $productRepo->save($product);
Unfortunately when the script runs the following error is produced:
PHP Fatal error: Uncaught Magento\Framework\Exception\InputException: The image content is not valid. in /var/www/html/vendor/magento/module-catalog/Model/ProductRepository/MediaGalleryProcessor.php:130 Stack trace: #0 /var/www/html/vendor/magento/module-catalog/Model/ProductRepository/MediaGalleryProcessor.php(112): Magento\Catalog\Model\ProductRepository\MediaGalleryProcessor->processEntries(Object(Magento\Catalog\Model\Product\Interceptor), Array, Array) #1 /var/www/html/vendor/magento/module-catalog/Model/ProductRepository.php(477): Magento\Catalog\Model\ProductRepository\MediaGalleryProcessor->processMediaGallery(Object(Magento\Catalog\Model\Product\Interceptor), Array) #2 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Catalog\Model\ProductRepository->save(Object(Magento\Catalog\Model\Product\Interceptor)) #3 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Catalog\Model\ProductRepository\Interceptor->___callParent('save', Array) #4 /var/www/html/vendor/m in /var/www/html/vendor/magento/module-catalog/Model/ProductRepository/MediaGalleryProcessor.php on line 130
Without the $product->addImageToMediaGallery(...); line the script works just fine. The image file is readable and a valid jpg.
Perhaps I'm doing something really dumb because I just started coding for Magento. Would be nice if someone could get me in the right direction
Solved! Go to Solution.
Hi @frank_entz
okay , i understand !! i have slightly modified the code and now its working fine !
Try below code :
<?php require_once 'app/bootstrap.php'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); $product = $objectManager->create('\Magento\Catalog\Model\Product'); $objectManager->get(\Magento\Framework\Registry::class)->register('isSecureArea', true, true); $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); $product->setSku('123'); // Set your sku here $product->setName('123'); // Name of Product $product->setAttributeSetId(4); // Attribute set id $product->setStatus(1); // Status on product enabled/ disabled 1/0 $product->setWeight(10); // weight of product $product->setVisibility(4); // visibilty of product (catalog / search / catalog, search / Not visible individually) $product->setTaxClassId(0); // Tax class id $product->setTypeId('simple'); // type of product (simple/virtual/downloadable/configurable) $product->setPrice(19.99); // price of product $product->setStockData( array( 'use_config_manage_stock' => 0, 'manage_stock' => 1, 'is_in_stock' => 1, 'qty' => 999999999 ) ); $product->save(); // Adding Image to product $imagePath = "/var/www/html/mm223/pub/media/logo_puma.jpg"; // path of the image $product->addImageToMediaGallery($imagePath, array('image', 'small_image', 'thumbnail'), false, false); $product->save();
Make sure your image path is correct !
Hope it helps !
Hi @frank_entz
Are you running this script from the root folder of the magento 2 ?
Second thing instead of - $imageFileName = '/var/www/html/pub/media/pic1.jpg';
can you write below code and then check ?
$imageFileName = '../pub/media/pic1.jpg';
Meaning - remove var/www/html from the path if you are running this script from the root directory of magento 2.
then check and let me know if you still have any issue on the same
Hope it helps !
Hi @Manthan Dave,
thanks for your reply.
Are you running this script from the root folder of the magento 2 ?
Yes. It's just to test things on a local install so I thought this would be ok.
Second thing instead of - $imageFileName = '/var/www/html/pub/media/pic1.jpg';
can you write below code and then check ?
$imageFileName = '../pub/media/pic1.jpg';Meaning - remove var/www/html from the path if you are running this script from the root directory of magento 2.
If I run it with either
$imageFileName = '../pub/media/pic1.jpg';
or
$imageFileName = 'pub/media/pic1.jpg';
I get an "Image does not exist" error. But the image is still under /var/www/html/pub/media/pic1.jpg
Hi @frank_entz
okay - i understand !! i think this is known issue previously !!
can you do first product details save then image code and save it again and then try ?
Below is the code :
<?php require_once 'app/bootstrap.php'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); $objectManager->get(\Magento\Framework\Registry::class)->register('isSecureArea', true, true); $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); $productRepo = $objectManager->get(\Magento\Catalog\Model\ProductRepository::class); $product = $objectManager->create(\Magento\Catalog\Model\Product::class); $product->setSku('123'); $product->setName('123'); $product->setPrice("19.99"); $product->setTypeId('simple'); $product->setAttributeSetId(4); $productRepo->save($product); //image code starting from here $imageFileName = '/var/www/html/pub/media/pic1.jpg'; $product->addImageToMediaGallery($imageFileName, ['image', 'small_image', 'thumbnail'], true, false); $productRepo->save($product);
Replace above code with your once ! and then try , it might work for you !
I still get the "Image content is not valid" error. Even if I save the product before adding the the image and after adding it.
Hi @frank_entz
okay , i understand !! i have slightly modified the code and now its working fine !
Try below code :
<?php require_once 'app/bootstrap.php'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); $product = $objectManager->create('\Magento\Catalog\Model\Product'); $objectManager->get(\Magento\Framework\Registry::class)->register('isSecureArea', true, true); $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); $product->setSku('123'); // Set your sku here $product->setName('123'); // Name of Product $product->setAttributeSetId(4); // Attribute set id $product->setStatus(1); // Status on product enabled/ disabled 1/0 $product->setWeight(10); // weight of product $product->setVisibility(4); // visibilty of product (catalog / search / catalog, search / Not visible individually) $product->setTaxClassId(0); // Tax class id $product->setTypeId('simple'); // type of product (simple/virtual/downloadable/configurable) $product->setPrice(19.99); // price of product $product->setStockData( array( 'use_config_manage_stock' => 0, 'manage_stock' => 1, 'is_in_stock' => 1, 'qty' => 999999999 ) ); $product->save(); // Adding Image to product $imagePath = "/var/www/html/mm223/pub/media/logo_puma.jpg"; // path of the image $product->addImageToMediaGallery($imagePath, array('image', 'small_image', 'thumbnail'), false, false); $product->save();
Make sure your image path is correct !
Hope it helps !
Hi,
yes your code works fine. Thank you!
Hi @frank_entz
Glad to know that you have resolved your issue !! happy to help and keep helping
Hi Dave (moderator)
I see the solution contain a method that according to the documentation will be depreciated which is $product->save(); instead of $productRepository->save($product); any update about this because I am working on Magento 2.3.3 still with this issue.
Thank you
Although yes, The solution provided doesn't give any error.
But image roles are not being set.
This is an issue I'm facing, anyone has a solution to this?