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

时间:2016-01-29 13:53:20

标签: google-api google-drive-api google-api-nodejs-client

我想知道是否可以使用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在其库中隐藏了这个配置对象。

所以我的问题是 - 是否可以在不干扰/黑客入侵图书馆的情况下这样做?

1 个答案:

答案 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));
});