Node.js使用Google Drive API获取文件内容无法得到可读文本求助
问题根因
你返回的Buffer开头50 4B 03 04是ZIP格式的标准文件头,说明你当前下载的不是纯文本文件,大概率是docx、xlsx这类Office格式文件、压缩包,或是未做格式转换的Google Workspace文档,直接转UTF-8字符串自然会显示乱码。你需要根据你要读取的文件类型选择对应的处理方案:
分场景解决方案
场景1:读取txt、json、md等纯文本格式文件
你调用接口时未指定响应类型,默认返回二进制流,只需新增responseType: 'text'配置即可直接获取可读文本,修改downloadFile函数如下:
function downloadFile(auth, fileId) { const drive = google.drive({version: 'v3', auth}); drive.files.get({ fileId: fileId, alt: 'media', responseType: 'text' // 新增这行配置 }, function(err, { data }) { if (err) return console.log('下载错误', err); console.log('可读文本内容:', data); }) }
场景2:读取Google Docs/Sheets/Slides等谷歌云文档
不能直接用alt: 'media'下载,需要调用export接口将谷歌云文档导出为可读格式,示例代码(导出Google Docs为纯文本):
function exportGoogleDoc(auth, fileId) { const drive = google.drive({version: 'v3', auth}); drive.files.export({ fileId: fileId, mimeType: 'text/plain', // 可按需替换为'application/vnd.openxmlformats-officedocument.wordprocessingml.document'导出为docx responseType: 'text' }, function(err, { data }) { if (err) return console.log('导出错误', err); console.log('文档文本内容:', data); }) }
如果需要导出为docx/xlsx等格式后再解析内容,可将responseType设为arraybuffer,写入本地文件后用对应解析库处理。
场景3:读取docx、xlsx等Office格式文件
直接下载的是二进制文件,需要引入对应解析库读取内容:
- 读取docx可使用
mammoth库 - 读取xlsx可使用
xlsx库
示例代码(解析docx文本内容):
// 先执行npm install mammoth安装依赖 const mammoth = require('mammoth'); function downloadDocx(auth, fileId) { const drive = google.drive({version: 'v3', auth}); drive.files.get({ fileId: fileId, alt: 'media', responseType: 'arraybuffer' }, async function(err, { data }) { if (err) return console.log('下载错误', err); // 解析docx内容 const result = await mammoth.extractRawText({buffer: Buffer.from(data)}); console.log('docx文本内容:', result.value); }) }
内容的提问来源于stack exchange,提问作者Sai sri
相关产品推荐
相关产品推荐

