Невозможно создать изображение в magento api, если артикул продукта содержит косую черту (/)

Я пытаюсь создать изображение с помощью magento image api, следуя тому же коду в этом документ Magento.

И он работает нормально, за исключением того, что 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()); in 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));

person Community    schedule 21.02.2014    source источник
comment
просто мысль, замените / на _ или используйте идентификатор продукта   -  person waldek_h    schedule 21.02.2014
comment
@waldek_c Но это создаст некоторые трудности для продавцов, у которых есть доступ к администратору magento. Вот почему. :(   -  person    schedule 21.02.2014
comment
Почему трудности? Я думал, что в вашем коде перед сохранением изображения отфильтруйте SKU продукта и замените странные символы, такие как /, для пользователей с правами администратора ничего не изменится.   -  person waldek_h    schedule 21.02.2014
comment
waldek_c прав. См. andrewbrettwatson.com/index .php/help/   -  person Dushyant Joshi    schedule 21.02.2014
comment
Вы не можете ничего вводить в качестве SKU. Должны быть некоторые лучшие рекомендации, чтобы разрешить SKU. Подробнее можно прочитать по предыдущей ссылке   -  person Dushyant Joshi    schedule 21.02.2014
comment
@DushyantJoshi Понятно. Я попытался добавить те же SKU, что и Cisco.   -  person    schedule 21.02.2014
comment
Проблемы с файловой системой, которая использует / в качестве разделителя, или проблемы с вашими продавцами. Вам придется доставлять неудобства продавцам... Им все равно не нужно видеть имя файла изображения.   -  person Fiasco Labs    schedule 03.10.2014


Ответы (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.

person seanbreeden    schedule 23.02.2014