使用 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));
});
我想知道是否可以使用来自 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));
});