使用 http 客户端将文件发送到 API

Bri*_*ick 6 php curl symfony

我正在努力将文件发送到 api 端点,该端点为我提供了要发布的以下 curl 示例。

curl -X POST -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data" -F "file=@submission.zip" api_url
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码 - 在此之前我收到了成功的身份验证响应,但收到了 500 响应。

$file = fopen('C:\\Users\\username\\Desktop\\api\\' . $fileName, 'r');

        return $this->client->request(
            'POST',
            'api_url', [
                'headers'=>[
                    'Authorization'=>$accessToken,
                    'Content-Type'=> 'multipart/form-data'
                ],
                'body'=>[
                    'file'=> $file
                ]
            ]
        );
Run Code Online (Sandbox Code Playgroud)

我不确定我还缺少什么。任何建议表示赞赏。

Iho*_*rov 5

如果您想发送唯一的文件,请尝试将代码更改为

'body' => fopen('C:\\Users\\username\\Desktop\\api\\' . $fileName, 'r')
Run Code Online (Sandbox Code Playgroud)

如果您想发送带有某些字段的文件,您可以尝试这样的操作

use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\Multipart\FormDataPart;

$data = [
    'data' => 'some data',
    'file' => DataPart::fromPath('/path/to/file'),
];

$formData = new FormDataPart($data);
$headers = $formData->getPreparedHeaders()->toArray();
$headers['Authorization'] = $accessToken;
$headers['Content-Type'] = 'multipart/form-data';
$client->request('POST', 'api_url', [
    'headers' => $headers,
    'body' => $formData->bodyToIterable(),
]);
Run Code Online (Sandbox Code Playgroud)