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

使用Curl上传CSV至Google Drive报错:Bad content type. Please use multipart.

问题分析与修复方案

你遇到的"Bad content type. Please use multipart."错误,根源在于multipart请求的格式不规范,以下是具体问题和修复步骤:

核心问题点

  • Content-Type头格式错误:multipart/related需要明确指定boundary参数,正确格式应为multipart/related; boundary="section_divider",你的写法缺少boundary=标识。
  • Authorization头缺少空格:Bearer和令牌之间必须有空格,否则会导致身份验证失败。
  • JSON格式错误:"name": "test.xlsx",末尾多了逗号,会触发JSON解析错误。
  • 文件部分Content-Type多余逗号:Content-Type: '.$mime_type.',里的逗号会破坏请求格式。
  • Multipart分隔格式不规范:每个部分的头和内容之间需要空行分隔,且分隔符前后的换行要正确,避免多余缩进导致格式混乱。

修复后的完整代码

public function uploadFileToDrive($token, $fileContent){
    echo "Iniciando subida de archivo a drive .... 
";
    
    try {
        $apiUrl = 'https://www.googleapis.com/';
        $ch1 = curl_init();

        $mime_type = 'text/csv';
        // 定义分隔符,避免特殊字符
        $boundary = 'section_divider';
        // 构建规范的multipart内容,注意换行和空行要求
        $data = "--{$boundary}
Content-Type: application/json; charset=UTF-8

{
    \"name\": \"test.csv\"
}

--{$boundary}
Content-Type: {$mime_type}

{$fileContent}
--{$boundary}--
";

        curl_setopt($ch1, CURLOPT_URL, $apiUrl . 'upload/drive/v3/files?uploadType=multipart');
        curl_setopt($ch1, CURLOPT_POST, 1);
        curl_setopt($ch1, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

        // 修复HTTP头格式
        curl_setopt($ch1, CURLOPT_HTTPHEADER, array(
            'Content-Type: multipart/related; boundary="' . $boundary . '"',
            'Authorization: Bearer ' . $token
        ));

        $response = curl_exec($ch1);
        if ($response === false) {
            echo 'Curl error: ' . curl_error($ch1);
        } else {
            echo "Operation completed without any errors 
";
            $output = $response;
        }
        curl_close($ch1);
        var_dump($output);
        return $output;

    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}

额外优化建议

  • 文件名改为test.csv更符合实际上传的文件类型,避免混淆。
  • 建议使用PHP_EOL替代硬编码的换行符,保证跨平台兼容性。
  • 生产环境建议开启CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST参数,提升请求安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:24