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

使用googleapis v.25从Google Drive获取文档缓冲区失败求助

解决googleapis v25中drive.files.get返回损坏缓冲区的问题

我之前也踩过googleapis v25这个版本的坑!问题根源在于新版本的默认响应处理逻辑变了——即使你指定了alt: 'media',它还是会自动把二进制数据当成字符串去解析,导致最终拿到的buffer编码错误,自然无法被mammoth或Word识别。

要修复这个问题,你需要显式告诉API返回原始的二进制数组缓冲区,具体做法是在请求配置里加上responseType: 'arraybuffer'参数,然后把返回的arraybuffer转换成Node.js的Buffer对象。

修改后的代码如下:

function getBuffer(auth, fileId) { 
  return new Promise((resolve, reject) => { 
    drive.files.get(
      { 
        auth: auth, 
        fileId: fileId, 
        alt: 'media',
        responseType: 'arraybuffer' // 核心配置:指定返回二进制数据类型
      }, 
      function(err, response) { 
        if (err) { 
          reject('The API returned an error: ' + err); 
        } 
        // 将ArrayBuffer转换为Node.js可识别的Buffer
        const validBuffer = Buffer.from(response.data);
        resolve(validBuffer); 
      } 
    ); 
  }); 
}

为什么这样改?

  • 在googleapis v25及以后的版本中,默认的responseType是json,即便请求的是媒体文件,它也会尝试把二进制流解析成字符串,这就破坏了原始的文件结构。
  • 指定responseType: 'arraybuffer'后,API会直接返回未经处理的原始二进制数据,再通过Buffer.from()转换成Node.js的Buffer,这样拿到的就是完整且正确的文件缓冲区了。

你可以测试一下:调用这个函数后把buffer保存成.docx文件,应该能正常用Word打开,传入mammoth解析也不会再提示损坏了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:41:04