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

使用NodeJS调用Google Drive API v3下载文件异常求助

问题分析与解决方案

问题根源

axios默认会将响应数据解析为UTF-8编码的字符串,而图片这类二进制文件包含大量非UTF-8兼容的字节,解析过程中会破坏原始数据结构,导致保存后的文件内容异常。

修复代码

修改下载方法

在axios请求中添加responseType: 'arraybuffer',让axios以二进制数组形式接收数据,避免编码转换损坏文件:

async downloadFile(fileId, mimeType) {
    await this.getToken();
    return axios({
        url: `https://www.googleapis.com/drive/v3/files/${fileId}`,
        method: "GET",
        headers: {
            authorization: `Bearer ${this.token}`,
        },
        params: {
            alt: 'media',
        },
        responseType: 'arraybuffer' // 关键配置:保留二进制数据
    })
    .then(response => response.data)
    .catch(error => {
        console.error(error);
        throw error;
    });
}

修正调用代码

注意变量名一致性,同时确保文件写入时正确处理二进制缓冲区:

let fileBuffer = await drive.downloadFile(driveId, mimeType);
// 回调式写法
fs.writeFile('./sth.jpg', fileBuffer, (err) => {
    if (err) console.error('保存失败:', err);
});

// 或更贴合async/await的Promise写法
await fs.promises.writeFile('./sth.jpg', fileBuffer);

原理说明

设置responseType: 'arraybuffer'后,axios会跳过字符串解析步骤,直接返回原始的二进制数据缓冲区(ArrayBuffer),写入文件时能完整保留文件的原始字节,确保下载后的图片和手动下载的内容完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:35:26