4

わかりました、少し背景を説明します。広告や製品などを処理するCakePHPで書かれたシステムAがあります。最近、私は Laravel で書かれた別のシステムに取り組んでいます。これは、不動産業者がシステム A にある不動産リストを投稿および管理するためのセルフサービス ツールとして機能します。サイトをシステム A に提供します。POST リクエストを処理し、画像ファイルをサーバーに保存するための簡単なコントローラー アクションを Cake で作成しました。

http://example.com/image/add

postmanなどの REST アプリケーションを使用して、POST 要求を送信し、画像をアップロードし、適切な応答を得ることができます。システム A (Cake) 側では、すべてが適切に見えます。

現在、Laravel のセルフサービス システムで、Guzzleを使用して HTTP リクエストを送信しています。ガズル投稿リクエストにまったく同じフィールドとファイルを入力しましたが、同じ出力が得られません。要求はシステム A によって受信されますが、画像は追加されず、ランダムな HTML ページが返されます。郵便配達員と他のいくつかのアプリケーションがまったく同じ応答と機能を取得するが、Guzzle で送信された私の要求がそうでない場合、私の guzzle 要求に問題があると考えています。これが私のガズルコードです:

$client = new Client();

    // Create the request.
    $request = $client->createRequest("POST", "http://example.com/image/add");

    // Set the POST information.

    $postBody = $request->getBody();
    $postBody->setField('user_id', $userId);
    $postBody->setField('api_key', $token);
    $postBody->setField('product_id', $product_id);
    $postBody->addFile(new PostFile('image[data]', fopen('tmp/images/'.$input->image, 'r')));

    // Send the request and get the response.
    $response = $client->send($request);

Postman からの有効な POST リクエストは次のとおりです。

POST /image/add HTTP/1.1
Host: example.com
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="product_id"

1000
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="user_id"

8345
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="api_key"

secretKey
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="data[image]"; filename="steve-jobs.jpg"
Content-Type: image/jpeg


----WebKitFormBoundaryE19zNvXGzXaLvS5C

これが文字列へのガズルリクエストです。読みやすさの問題についてお詫び申し上げます。

POST /image/add HTTP/1.1 Host: example.com User-Agent: Guzzle/4.0.2 curl/7.22.0            PHP/5.5.9-1+sury.org~precise+1 Content-Length: 124647 Content-Type: multipart/form-data;   boundary=53a1f21e04080 --53a1f21e04080 Content-Disposition: form-data; name="user_id" 8345 --53a1f21e04080 Content-Disposition: form-data; name="api_key"  secretKey --53a1f21e04080 Content-Disposition: form-data; name="product_id" 1000 --53a1f21e04080 Content-Disposition: form-data; filename="steve-jobs.jpg"; name="image[data]" Content-Type: image/jpeg

次に、画像データの文字をまとめます。

誰かがガズルで私の POST リクエストの問題を見ることができるかどうか、または誰かがガズルでこの種の奇妙な問題に遭遇したことがあるかどうかを尋ねています。

編集:CakePHP 2.4.1を使用しています

4

1 に答える 1

2

私が知る限り、それはファイル フィールド名の小さな間違いでありdata[image]、 ではなくである必要がありimage[data]ます。

new PostFile('data[image]', /* ... */);

あなたのアプリでは、ファイル データが 経由CakeRequest::$dataで利用できることに依存している可能性がありdataますCakeRequest::$params['form']

実際には重複していませんが、(CakePHP フォームヘルパー関連の詳細) 参照については、以下も参照してください。

CakePHP: 投稿されたファイル データがリクエストに含まれていない -> データ

于 2014-06-18T20:38:51.823 に答える