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

使用Google Drive API的Resumable URI上传无响应且报408错误,代码是否有问题?

Google Drive可恢复上传408错误排查与修复

问题场景

通过Google Drive API获取Resumable URI后,使用该URI执行PUT文件上传时无响应,一段时间后收到408请求超时错误:

408
这是一个错误。
您的客户端发送请求耗时过长。
我们仅了解这些信息。

Resumable URI:https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=ADPycducJGWQ62n6E0K5mD81RGJw-0eIsga8dBxarfSY_2Pk5hFJhBs230Q8ay

原PUT请求代码:

let postFile =  await axios.request(
  {
    method: "PUT",
    url: resumableURI,
    headers: {
      Authorization: `Bearer ${process.env.GOOGLE_ACCESS_TOKEN}`,
      "Content-Length": req.files.muploadedFile.size,
    },
    body : bufferToStream(buffer)
  }
)
console.log(postFile.data)

代码问题分析

  1. Axios请求体参数错误:Axios中传递请求体的字段是data,而非body。原代码用body导致实际请求没有携带文件内容,服务器一直等待数据传输,最终返回408超时。
  2. 缺少Content-Type头:Google Drive API需要明确的文件类型标识,未指定Content-Type可能导致服务器无法正确解析请求,延长处理时间甚至触发超时。
  3. 流的有效性验证:需确保bufferToStream函数正确将Buffer转换为Node.js可读流,若流未正确初始化或结束,会导致服务器一直等待数据。

修正后的代码

// 先确保bufferToStream函数正确实现,示例:
function bufferToStream(buffer) {
  const stream = require('stream').Readable();
  stream.push(buffer);
  stream.push(null);
  return stream;
}

let postFile = await axios.request({
  method: "PUT",
  url: resumableURI,
  headers: {
    Authorization: `Bearer ${process.env.GOOGLE_ACCESS_TOKEN}`,
    "Content-Length": req.files.muploadedFile.size,
    "Content-Type": req.files.muploadedFile.mimetype // 添加文件MIME类型
  },
  data: bufferToStream(buffer) // 替换body为data
});
console.log(postFile.data);

额外注意事项

  • 确认process.env.GOOGLE_ACCESS_TOKEN是有效的、未过期的访问令牌。
  • 若文件较大,可利用可恢复上传的分块特性,避免单次请求超时。
  • 检查服务器网络环境,确保能稳定连接到Google Drive API服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:12:30