1

Я хотел бы узнать, можно ли получить точные двоичные данные с помощью обратного вызова от метода API Google NodeJS. Я знаю, что объект, возвращенный вызовом этой конечной точки API, является обычным объектом request, который может быть, например, конвейер так:Получение содержимого двоичного файла вместо UTF-экранированного с использованием file.get

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 скрывает это объект конфигурации в своей библиотеке.

Так что мой вопрос: возможно ли это сделать, не мешая/взломать библиотеку?

ответ

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)); 
}); 
+0

Это помогло мне решить мою проблему, спасибо. Но я не понимаю, почему это работает, когда стиль обратного вызова в вашем вопросе не работает. Какая кодировка передается 'data' в обратном вызове? Было бы правильно сказать, что [этот образец] (https://github.com/google/google-api-nodejs-client/blob/master/samples/drive/download.js) будет работать только для 'utf8 'файлы? – Mr5o1

Смежные вопросы