You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用Guzzle向Google Drive上传文件报不支持内容类型错误

问题现象

我正尝试调用Google Drive v3 API上传文件,但是接口请求返回不支持内容错误,完全相同的请求在Postman中可以正常运行。对应实现代码如下:

$client = new Client();
    
$headers = [
    'Authorization' => 'Bearer '.$token,
   ];
$upload = $client->request('POST', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart', [
                 'multipart' => [
                     [
                        'name'     => 'metadata',
                        'contents' => json_encode($data)
                     ],
                     [
                        'name'     => 'media',
                        'contents' => file_get_contents($file)
                     ]
                 ],
                   'headers' => $headers,
           ]);

成功的Postman请求示例

postman示例

请求头信息

请求头

data.json元数据配置

{
  "name": "data.json",
  "parents": [
      "<id here>"
  ]
}
解决方案

报错的核心原因是你没有给multipart请求中的metadata字段指定正确的Content-Type请求头,Google Drive v3的multipart上传要求元数据部分的内容类型必须为application/json,Guzzle默认会给没有指定类型的multipart字段设置为text/plain,所以接口会返回不支持内容的错误。

修改后的代码如下:

$client = new Client();
    
$headers = [
    'Authorization' => 'Bearer '.$token,
];
$upload = $client->request('POST', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart', [
    'multipart' => [
        [
            'name'     => 'metadata',
            'contents' => json_encode($data),
            // 新增元数据的内容类型声明
            'headers'  => ['Content-Type' => 'application/json']
        ],
        [
            'name'     => 'media',
            'contents' => file_get_contents($file),
            // 可选:如果上传的是特定类型文件,也可以补充对应Content-Type
            'headers'  => ['Content-Type' => mime_content_type($file)]
        ]
    ],
    'headers' => $headers,
]);

如果修改后还是报错,可以检查下你的授权令牌是否拥有对应父目录的写入权限,以及父目录ID是否填写正确即可。

内容的提问来源于stack exchange,提问作者Dhamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:54:00