Magento - programmatically add image from url?

11,261

Hope this help

$newProduct = Mage::getModel('catalog/product')->load($productId);

$image_url  = $data['productImg'];
$image_url  = str_replace("https://", "http://", $image_url); // replace https tp http
$image_type = substr(strrchr($image_url,"."),1); //find the image extension
$filename   = $data['productPartNumber'].'.'.$image_type; //give a new name, you can modify as per your requirement
$filepath   = Mage::getBaseDir('media') . DS . 'import'. DS . $filename; //path for temp storage folder: ./media/import/

$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$image_url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Cirkel');
$query = curl_exec($curl_handle);
curl_close($curl_handle);

Mage::Log('68. File Path ' . $filepath . ', image url ' . $image_url);

file_put_contents($filepath, $query); //store the image from external url to the temp storage folder file_get_contents(trim($image_url))
$filepath_to_image = $filepath;

if (file_exists($filepath_to_image)) {
    $newProduct->addImageToMediaGallery($filepath_to_image, array('image', 'small_image', 'thumbnail'), false, false);
    $newProduct->save();
}
Share:
11,261
user3788452
Author by

user3788452

Updated on June 04, 2022

Comments

  • user3788452
    user3788452 almost 2 years

    I'm currently working around one script which programmatically add products. Right now I have problem with the part that this script gets an image from URL and upload it to a directory and then use it as a product image.

    I am using Magento 1.9.1.

    So here is the part of the script which is supposed to take the image from the URL and upload it to the new product as product image:

    $product = Mage::getModel('catalog/product')->load($new_product_id);
    
    $url = 'http://media.asicdn.com/images/jpgo/6080000/6089330.jpg';
    $img = '/media/catalog/product/images/image1.jpg';
    file_put_contents($img, file_get_contents($url));
    
    $product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
    $product->addImageToMediaGallery ($img , array ('image','small_image','thumbnail'), false, false);
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 
    
    $product->save();
    

    When I do that I receive error:

    Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'Image does not exist.' in /home/superweb/public_html/sportsdirect/app/Mage.php:595 Stack trace: #0 /home/superweb/public_html/sportsdirect/app/code/core/Mage/Catalog/Model/Product/Attribute/Backend/Media.php(274): Mage::throwException('Image does not ...') #1 /home/superweb/public_html/sportsdirect/app/code/core/Mage/Catalog/Model/Product.php(1047): Mage_Catalog_Model_Product_Attribute_Backend_Media->addImage(Object(Mage_Catalog_Model_Product), '/media/catalog/...', Array, false, false) #2 /home/superweb/public_html/sportsdirect/SignProduct.php(63): Mage_Catalog_Model_Product->addImageToMediaGallery('/media/catalog/...', Array, false, false) #3 {main} thrown in /home/superweb/public_html/sportsdirect/app/Mage.php on line 595
    

    The product is created but there is no image for the product.

  • srgb
    srgb over 9 years
    add try-catch to $product->save()