【问题标题】:How to create image with magento api如何使用 magento api 创建图像
【发布时间】:2012-12-04 13:00:36
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: php api magento soap


    【解决方案1】:

    我找到了解决方案。它试图将图像放入的目录 (.../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 将其发送给客户端。

    【讨论】:

      【解决方案2】:

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

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

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

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多