我想知道是否可以使用NodeJS Google API的drive.files.get
方法回调来获取准确的二进制数据。我知道通过调用此API端点返回的对象是一个普通的request
对象,可以是例如像这样管道:
drive.files.get({
fileId: fileId,
alt: 'media'
}).pipe(fs.createWriteStream('test'));
但是,我想知道是否可以使用以下语法从回调中获取二进制数据:
drive.files.get({
fileId: fileId,
alt: 'media'
}, function(err, data) {
// Here I have binary data exposed
});
据我所知,应该可以在创建过程中从请求中获取这类数据,并在{encoding: null}
选项对象中传递request
,如下所示:
var requestSettings = {
method: 'GET',
url: url,
encoding: null // This is the important part
};
request(requestSettings, function(err, data) {/.../})`
然而,似乎Google在其库中隐藏了这个配置对象。
所以我的问题是 - 是否可以在不干扰/黑客入侵图书馆的情况下这样做?
答案 0 :(得分:2)
好的,所以我找到了对其他人有用的答案:)
前面提到的drive.files.get
方法返回Stream对象,因此可以使用适当的事件处理程序直接处理它。然后,缓冲区部分可以连接成一个部分,并在回调中发送回来,如下所示:
var stream = drive.files.get({
fileId: fileId,
alt: 'media'
});
// Build buffer
var chunks = [];
stream.on('data', (chunk) => {
chunks.push(chunk);
});
stream.on('end', () => {
return cb(null, Buffer.concat(chunks));
});