web-dev-qa-db-ja.com

Guzzle〜6.0マルチパートとform_params

私はこのようにファイルをアップロードし、同時に投稿パラメータを送信しようとしています:

$response = $client->post('http://example.com/api', [
    'form_params' => [
        'name' => 'Example name',
    ],
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/image', 'r')
        ]
    ]
]);

ただし、form_paramsフィールドは無視され、マルチパートフィールドのみが投稿本文に表示されます。 guzzle 6.0で両方を送信できますか?

12
Jordan Dobrev

私は同じ問題に出くわしました。 form_paramsを multipart 配列に追加する必要があります。ここで、「name」はフォーム要素名であり、「contents」は値です。あなたが提供したサンプルコードは次のようになります:

$response = $client->post('http://example.com/api', [
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/image', 'r')
        ],
        [
            'name'     => 'name',
            'contents' => 'Example name'
        ]
    ]
]);
27
Simon Crowfoot

私もそこにたどり着きましたが、残念ながら多次元のparams配列がある場合は機能しません。私がそれを機能させる唯一の方法は、あなたがform_paramatersを配列のクエリパラメータとして送信する場合です:

$response = $client->post('http://example.com/api', [
    'query' => [
        'name' => 'Example name',
    ],
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/image', 'r')
        ]
    ]
]);
3
Jordan Dobrev