2012-12-04 35 views
2

我试图使用Magento的API来创建一个图像,但它与消息如何创建图像与Magento的API

SoapFault exception: [104] Cannot create image. 

这不是一个有用的错误消息,失败!这是什么意思?它为什么这样做?如何使用magento api创建图像?

这是我的代码:

$client = new SoapClient($wsdlurl); 
$sessionId = $client->login($user, $key); 
$file = array(
    'content' => 
    base64_encode(file_get_contents($filename)), 
    'mime' => 'image/jpeg', 
    'name' => 'newfile.jpg' 
); 

$result = $client->call(
    $sessionId, 
    'catalog_product_attribute_media.create', 
    array(
     $productId, 
     array('file'=>$file, 'label'=>'new_test_label', 'position'=>'100', 'types'=>array('thumbnail'), 'exclude'=>0) 
    ) 
); 

我在做什么错?

回答

0

我找到了解决方案。它试图将图像放入目录(.../media/catalog/product /)没有设置允许在其中创建新文件夹的权限。

尽管为了别人的利益,我确实找到了一些有用的东西: 首先,文件系统操作由./lib/Varien/Io/File.php执行,它拥有自己的cd包装器, mkdir等等,如果它们失败,会抛出非常模糊的例外。

该目录的创建是发生在Mage_Catalog_Model_Product_Attribute_Backend_Media - > _ moveImageFromTmp

这是从./app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php 称为负责处理所有的图像API调用,例如创建,更新,删除等。

所以,如果你有同样的问题,它不是一个权限问题......你现在知道在哪里把你的调试代码;)。

哦,是的,如果你想输出一个错误信息,你不能只是回声或死亡;你需要抛出一个异常,这将被Mage_Catalog_Model_Product_Attribute_Media_Api捕获,然后调用$ this - > _ fault将它发送给客户端。

0

我只是想为此添加一些其他相关信息 - 并感谢Benubird的评论,他们非常有帮助。我试图通过API上传图片,并得到了“无法创建图片”消息。

在深入了解Magento之后,我发现如果您的php.ini文件中的内存限制为-1,则会阻止上传任何图像。在Magento内核中,在尝试处理图像(lib/Varien/Image/Adapter/Gd2.php第57行)之前进行检查,其中图像的大小与可用内存进行比较。它没有考虑-1意味着无限的值并抛出“已达到内存限制”异常。

解决方法是将您的memory_limit值设置为非负数。正确的解决方法是让Magento代码正确处理这个问题(尽管如果imagecreatefromjpeg因为不可捕捉的错误而死亡,那么也许这是不可能的)。

祝你好运!