使用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
相关产品推荐
相关产品推荐

