首页 > 解决方案 > 如何使用 Guzzle 通过 POST 请求从 URL 发送文件

问题描述

当我以这种方式测试它时,我正在使用的端点工作正常:

curl -X POST ".../api/save" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@test.xlsx;type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

现在我需要在 Laravel 中使用 Guzzle 发送文件,但我从 API 端点收到了 400 Bad Request。该文件存储在公共磁盘中,所以我正在发送 URL。

这是我到目前为止所拥有的:

   $headers = [
            'Authorization' => 'Bearer ' . $token,
            'Accept' => 'application/json',
            'Content-Type' => 'multipart/form-data',
        ];

    $response = $this->client->request('POST', '.../api/save', [
        'headers' => $headers,
        'multipart' => [
            [
                'name' => 'image_file',
                'contents' => $file->url,
            ]
        ]
    ]);

标签: phplaravelguzzle

解决方案


您正在尝试做的是破坏一些 http 协议。

您不能在请求中发送资源链接并期望服务器在恢复请求处理之前下载它。

您可以从 url 下载文件并将其内容包含在您的请求中,

或者

发送 url 并在服务器上有代码逻辑来下载它。


推荐阅读