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 呼び出し (作成、更新、削除など) を処理します。

したがって、同じ問題があり、それが権限の問題ではない場合...デバッグコードをどこに置くべきかがわかります;)。

そうそう、エラー メッセージを出力したい場合は、echo や die だけではいけません。例外をスローする必要があります。これは 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 に答える