Php 使用HTTP发布文件时出错-部分为空

Php 使用HTTP发布文件时出错-部分为空,php,laravel,api,guzzle,Php,Laravel,Api,Guzzle,我尝试通过GuzzleHTTP将文件从我的应用程序发送到外部API,我的做法如下: public function storeImagesInAmazon(Request $request) { $uploadFilePath = 'some/endpoint'; $file = $request->file('file'); $client = new Client(); $response = $client->request('POST',

我尝试通过GuzzleHTTP将文件从我的应用程序发送到外部API,我的做法如下:

public function storeImagesInAmazon(Request $request) {

    $uploadFilePath = 'some/endpoint';
    $file = $request->file('file');

    $client = new Client();
    $response = $client->request('POST', $uploadFilePath, [
        'headers' => [
            'Accept'                => 'application/json',
            'Content-Type'          => 'multipart/form-data',
        ],
        'multipart' => [
            [
                'name'     => 'file',
                'contents' => $file
            ]
        ]
    ]);

    $result = json_decode($response->getBody(), true);

    return [
        'hashedID' => $result['hashedID']
    ];
}
我得到的错误是:

服务器错误:
POST-some/endpoint
导致
500内部服务器错误
响应:\n 处理文件时出错:无法处理文件:零件为空 我通过邮递员对它进行了测试,在身体形态数据中添加了key='file',value='some_file.pdf',我确信文件是正确的,我的意思是它没有损坏,我试着发布不同的文件,大的,小的,pdf或
jpg/png

但是我仍然有这个问题,我找不到解决办法。

我找到了这个解决办法

我想说的是,你需要$option作为你在那篇文章中的下一个参数 $response=$client->post('api',$options)

根据文档,$option是头文件、多部分文件或其他选项的位置。我已经尝试使用$options,它在我的案例中起了作用。

我找到了这个解决方案

我想说的是,你需要$option作为你在那篇文章中的下一个参数 $response=$client->post('api',$options)


根据文档,$option是头文件、多部分文件或其他选项的位置。我已经尝试使用$options,它在我的案例中起作用。

删除
内容类型
标题。对于多部分请求,它还需要包含一个适当的边界值——您正在设置的边界值中完全没有这个边界值。通过使用
multipart
键,guzzle应该知道它必须自己设置它。@CBroe我删除了Content-Type头,但是我得到了错误:不是一个multipart请求,假设part为null:(我尝试了这个主题的解决方案:但什么都没有改变,
$file=$request->file('file')
do?@CBroe这样我只从请求中获取文件。我还尝试通过'contents'=>fopen($file->getRealPath(),'r')或'contents'=>file\u get\u contents($file)将文件传递给'contents'删除
Content-Type
标题。对于多部分请求,这还需要包含一个正确的边界值,该边界值与您正在设置的边界值完全不符。通过使用
multipart
键,guzzle应该知道它必须自己设置它。@CBroe我删除了Content-Type标题,但随后出现错误:不是多部分请求,假设部分为空。:(我尝试了本主题的解决方案:但没有任何变化。
$file=$request->file('file')
do?@CBroe这样做,我只是从请求中获取文件。我还尝试通过'contents'=>fopen('file->getRealPath(),'r')或'contents'=>file\u get\u contents('file)将文件传递给'contents'