我目前正在编写一个以编程方式添加产品的脚本。 现在我有一个问题,即该脚本从URL获取图像并将其上传到目录,然后将其用作产品图像。
我使用的是Magento 1.9.1。
所以这里是脚本的一部分,它应该从URL获取图像并将其作为产品图像上传到新产品:
$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();
当我这样做时,我收到错误:
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
产品已创建,但产品没有图像。
答案 0 :(得分:3)
希望这个帮助
$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();
}
答案 1 :(得分:0)
Bellow代码适合我
$product = Mage::getModel('catalog/product')->load($productId);
$urlToImage = "SOME URL";
$mySaveDir = Mage::getBaseDir('media') . DS . 'my_images' . DS ;
$filename = basename($urlToImage);
$completeSaveLoc = $mySaveDir.$filename;
if(!file_exists($completeSaveLoc)){
try {
file_put_contents($completeSaveLoc,file_get_contents($urlToImage));
}catch (Exception $e){
}
}else{
//echo "FILE EXIST " . $completeSaveLoc . "<br/>";
}
try {
$product->addImageToMediaGallery($completeSaveLoc, array('image','thumbnail','small_image'), false);
$product->save();
} catch (Exception $e) {
Mage::log($e->getMessage());
}
答案 2 :(得分:0)
below code download the image agaisnst the skus in magento 2
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('memory_limit', '-1');
ini_set('max_execution_time', 0);
set_time_limit(0);
error_reporting(E_ALL);
$file = fopen('getImage.csv', 'r', '"'); // set path to the CSV file
require __DIR__ . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('adminhtml');
$directoryList = $objectManager->get('\Magento\Framework\App\Filesystem\DirectoryList');
// used for updating product stock - and it's important that it's inside the while loop
// $product = $objectManager->create('Magento\Catalog\Model\Product')->load();
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/stockupdate-new.log');
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$header = fgetcsv($file); // get data headers and skip 1st row
$required_data_fields = 2;
$counter =0;
$row=1;
while ( $row = fgetcsv($file, 40000, ",") ) {
$data = array();
$data = array_combine($header, $row);
$image_base = $data['image']; //this is for all images small_images ,thumbnail,base_image
// $extension=".jpg";
// $image_small = $data['small_image'];
// $image_thumbnail = $data['thumbnail_image'];
// $image_swatch = $data['swatch_image'];
$image_addtional = $data['additional_images'];
$sku = $data['sku'];
// $urlToImage = "SOME URL";
//foreach ($data as $key => $value) {
//for ($i = 0; $i <=$key; $i++) {
$mySaveDir =$directoryList->getPath('pub').'/media/newImg/'.$sku."-";
$filename = basename($image_base);
$completeSaveLoc = $mySaveDir.$filename.'.jpg';
if(!file_exists($completeSaveLoc)){
file_put_contents($completeSaveLoc,file_get_contents($image_base));
echo "-------image is successfully downloaded-".$sku."-----";
}else{
echo "this-". $sku."-img already downloaded------";
}
//}
//}
}