Guzzle~6.0 multipart和form_params

Jor*_*rev 11 php curl guzzle

我正在尝试上传文件并同时发送帖子参数,如下所示:

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

但是我的form_params字段被忽略,我的帖子正文中只有多部分字段.我可以用guzzle 6.0发送两者吗?

小智 28

我遇到了同样的问题.您需要将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'
        ]
    ]
]);
Run Code Online (Sandbox Code Playgroud)


Jor*_*rev 7

我也到了那里,但不幸的是,如果您有多维参数数组,它就不起作用。我让它工作的唯一方法是,如果您将 form_paramaters 作为数组中的查询参数发送:

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


Sol*_*try 5

我用谷歌搜索了类似的问题并在这里写下建议:

不要为多部分请求手动设置标头“Content-Type”。