使用 file.get 获取二进制文件内容而不是 UTF 转义

Getting binary file content instead of UTF-escaped using file.get

我想知道是否可以使用来自 NodeJS drive.files.get 方法的回调来获取精确的二进制数据 Google API。我知道通过调用此 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
});

据我所知,应该可以在请求创建期间从请求中获取此类数据,在 request 选项对象中传递 {encoding: null},如下所示:

 var requestSettings = {
   method: 'GET',
   url: url,
   encoding: null // This is the important part
};
request(requestSettings, function(err, data) {/.../})` 

但是 Google 似乎在其库中隐藏了这个配置对象。

所以我的问题是 - 没有 interfering/hacking 图书馆是否可以这样做?

好的,所以我找到了可能对其他人有用的答案:) 前面提到的 drive.files.get 方法 returns 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));
});