我正在尝试使用API v3从Google共享驱动器下载图像。下载会成功,但看不到图像。从MacOS Finder打开图像只会出现一个微调器。我开始使用文档中的示例(此处:https://developers.google.com/drive/api/v3/manage-downloads):
const drive = google.drive({version: 'v3', auth});
// ....
var fileId = '0BwwA4oUTeiV1UVNwOHItT0xfa2M';
var dest = fs.createWriteStream('/tmp/photo.jpg');
drive.files.get({
fileId: fileId,
alt: 'media'
})
.on('end', function () {
console.log('Done');
})
.on('error', function (err) {
console.log('Error during download', err);
})
.pipe(dest);
但是,由于. on()方法不存在,该操作失败。确切的错误为**"TypeError:驱动器.文件. get(...). on不是函数"**
该. get()方法返回一个promise。promise的响应包含数据,根据配置,可以是流、blob或arraybuffer。对于所有选项,当我将响应数据写入文件时,文件本身变得不可见,并且大小错误。实际代码(typescript,node.js)下面是arraybuffer的例子,blob(添加了name和modifiedDate)和stream的类似代码给出了相同的结果。
const downloader = googleDrive.files.get({
fileId: file.id,
alt: 'media',
}, {
responseType: 'arraybuffer',
});
return downloader
.then((response) => {
const targetFile = file.id + '.' + file.extension;
fs.writeFileSync(targetFile, response.data);
return response.status;
})
.catch((response) => {
logger.error('Error in Google Drive service download: ' + response.message);
return response.message;
}
);
}
所以问题是:
- 通过Google云端硬盘API v3处理下载的正确方法是什么?
- 我需要处理响应数据的任何格式吗?
所有的帮助非常感谢!谢谢
3条答案
按热度按时间w6mmgewl1#
如果我的理解正确的话,这个答案怎么样?
模式1:
在此模式中,
arraybuffer
用于表示responseType
。示例脚本:
Buffer.from()
。模式2:
在此模式中,
stream
用于表示responseType
。示例脚本:
备注:
supportsAllDrives: true
和/或supportsTeamDrives: true
。参考文献:
如果我误解了你的问题,这不是你想要的方向,我道歉。
i86rm4rw2#
使用async/await并包含teamdrive文件发布第三个模式以确保完整性。
yeotifhr3#
如果有人正在寻找一个解决方案是2023年,在这里你去!