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

解决Google Drive API可恢复上传中Content-Range Header解析错误

解决Google Drive API可恢复上传的"Failed to parse Content-Range Header"错误

核心问题排查与修复步骤

  1. 修正Axios请求参数格式
    你的代码错误地将Buffer数据包裹在{body: data}对象中作为PUT请求的第二个参数,这会让Axios自动把该对象序列化为JSON格式,导致实际发送的请求体并非原始二进制Buffer,进而造成Content-Length与实际内容长度不匹配,触发Content-Range解析错误。

    修正后的代码:

    const new_access_token = await refreshAccessToken();
    const res = await axios.put(resumable_url, data, {
        headers: {
            "Authorization": `Bearer ${new_access_token}`,
            "Content-Range": `bytes 0-255999/2000000`
        }
    });
    console.log(res);
    
  2. 移除手动设置的Content-Length
    Axios会自动根据传入的Buffer长度计算并设置Content-Length头,手动设置的值如果与实际Buffer长度不符,会直接导致Google Drive API无法解析Content-Range。建议删除代码中手动设置的"Content-Length": 256000。

  3. 验证Buffer分片长度
    在发送请求前,检查data的实际长度是否为256000字节:

    console.log(data.length); // 确认输出为256000
    

    如果长度不符,调整分片切割逻辑,保证分片长度与Content-Range中声明的0-255999(共256000字节)完全一致。

  4. 确认总文件大小一致性
    Content-Range中的总大小2000000必须与创建可恢复会话时指定的文件总大小完全一致。如果创建会话时未正确设置总大小,也会引发解析错误。

  5. 检查Content-Range格式
    确保Content-Range头的格式严格符合标准:bytes start-end/total,其中start是分片起始字节(从0开始),end是分片结束字节(start + 分片长度 - 1),total是文件总字节数。避免出现多余空格、换行或特殊字符。

后续分片上传注意事项

  • 下一个分片的Content-Range应从当前分片的结束字节+1开始,比如第一个分片结束于255999,第二个分片的Content-Range应为bytes 256000-511999/2000000。
  • 最后一个分片的结束字节必须等于文件总字节数-1,比如总大小2000000,最后一个分片的结束字节是1999999。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:54:18