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

Google api 使用file.get获取二进制文件内容而不是UTF转义,google-api,google-drive-api,google-api-nodejs-client,Google Api,Google Drive Api,Google Api Nodejs Client,我想知道是否有可能使用NodeJS Google API的drive.files.getmethod的回调来获取精确的二进制数据。我知道通过调用此API端点返回的对象是一个正常的请求对象,它可以像这样通过管道传输: drive.files.get({ fileId: fileId, alt: 'media' }).pipe(fs.createWriteStream('test')); 但是,我想知道是否可以使用以下语法从回调中获取二进制数据: drive.files.get({ f

我想知道是否有可能使用NodeJS Google API的
drive.files.get
method的回调来获取精确的二进制数据。我知道通过调用此API端点返回的对象是一个正常的
请求
对象,它可以像这样通过管道传输:

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}
应该可以从请求中获取此类数据,如下所示:

 var requestSettings = {
   method: 'GET',
   url: url,
   encoding: null // This is the important part
};
request(requestSettings, function(err, data) {/.../})` 
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));
});
然而,谷歌似乎在其库中隐藏了这个配置对象


因此,我的问题是——有没有可能在不干扰/入侵图书馆的情况下做到这一点

好的,所以我找到了对其他人有用的答案:) 前面提到的
drive.files.get
方法返回流对象,所以可以使用适当的事件处理程序直接处理它。然后,缓冲区部分可以连接成一个部分,并在回调中发送回,如下所示:

 var requestSettings = {
   method: 'GET',
   url: url,
   encoding: null // This is the important part
};
request(requestSettings, function(err, data) {/.../})` 
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));
});

这帮我解决了问题,谢谢。但我真的不明白为什么在你问题中的回调风格不起作用的情况下,这种方式会起作用。回调中传递给
数据的编码是什么?这样说只对“utf8”文件有效是正确的吗?