0

我正在尝试按照此magento doc中的相同代码通过 magento image api 创建图像。

除了 SKU 包含斜杠(/)字符外,它的工作正常。

货号:SPA-1XCHOC12/DS0

这是错误显示在httpd/error_log

[Fri Feb 21 07:35:33 2014] [error] [client 8.35.201.40] PHP Fatal error:  Uncaught SoapFault exception: [104] Cannot create image. in /var/www/html/product_api/image.php:22\nStack trace:\n#0 /var/www/html/product_api/image.php(22): SoapClient->__call('call', Array)\n#1 /var/www/html/product_api/image.php(22): SoapClient->call('67da4ad39466d6e...', 'product_media.c...', Array)\n#2 {main}\n  thrown in /var/www/html/product_api/image.php on line 22

为了确定确切的问题,我添加了此代码

$this->_fault('not_created', $e->getMessage());app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php

这是错误:

[Fri Feb 21 07:41:56 2014] [error] [client 8.35.201.42] PHP Fatal error:  Uncaught SoapFault exception: [104] Folder 'SPA-1XCHOC12' isn't writeable in /var/www/html/product_api/image.php:22\nStack trace:\n#0 /var/www/html/product_api/image.php(22): SoapClient->__call('call', Array)\n#1 /var/www/html/product_api/image.php(22): SoapClient->call('7f82eac2c509869...', 'product_media.c...', Array)\n#2 {main}\n  thrown in /var/www/html/product_api/image.php on line 22

文件media/catalog/product夹权限是. 777仍然显示相同的错误。

这是我的代码:

后值是sku = 'SPA-1XCHOC12/DS0'image_url='http://example.com/11233.jpg'

$sessionId = $proxy->login($api_user, $api_pwd);  

$newImage = array(
     'file' => array(
        'name' => $_POST['sku'],
        'content' => base64_encode(file_get_contents($_POST['img_url'])),
        'mime'    => 'image/jpeg'
     ),
     'position' => 0,
     'types'    => array('small_image', 'image', 'thumbnail'),
     'exclude'  => 0
);

$imageFilename = $proxy->call($sessionId, 'product_media.create', array($_POST['sku'], $newImage));
4

1 回答 1

1

由于您的图像是由您手动发送到例程的 sku 生成的,那么为什么不在那里清理它。它不会影响其他任何事情。

帖子值为 sku = 'SPA-1XCHOC12/DS0' 和 image_url=' http://example.com/11233.jpg '

$sessionId = $proxy->login($api_user, $api_pwd);  

// Replace slashes like waldek_c suggested
$sku_filename = str_replace("/","_",$_POST['sku']).".jpg";

$newImage = array(
 'file' => array(
    'name' => $sku_filename,     // Put filtered $sku_filename var here from above
    'content' => base64_encode(file_get_contents($_POST['img_url'])),
    'mime'    => 'image/jpeg'
),
 'position' => 0,
 'types'    => array('small_image', 'image', 'thumbnail'),
 'exclude'  => 0
);

$imageFilename = $proxy->call($sessionId, 'product_media.create', array($_POST['sku'], $newImage));

图像文件名将SPA-1XCHOC12_DS0.jpg代替SPA-1XCHOC12/DS0.

于 2014-02-23T14:07:01.373 回答