3

我正在尝试使用 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)
    )
);

我究竟做错了什么?

4

2 回答 2

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 将其发送给客户端。

于 2012-12-04T13:39:35.487 回答
0

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

在深入研究 Magento 之后,我发现如果您的 php.ini 文件中的内存限制为 -1,那么这会阻止任何图像被上传。在 Magento 核心中,在尝试处理图像之前会进行检查(lib/Varien/Image/Adapter/Gd2.php 第 57 行),其中将图像的大小与可用内存进行比较。它不考虑值 -1 表示无限制,并引发“已达到内存限制”异常。

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

祝你好运!

于 2014-11-16T23:28:31.647 回答