Как поток работает с обратным вызовом с использованием BLOB-объекта Azure createReadStream?
У меня есть функция, которая успешно возвращает объект потока в вызывающую функцию, содержащую нужный мне большой двоичный объект из хранилища Azure:
module.exports.readFileToStream = function(fileSpec, callback){
return blobService.createReadStream(fileSpec.container, fileSpec.file, function(err, results){
if(err){
console.log(err);
callback(err);
}
console.log(JSON.stringify(results, null, 2));
callback(null, results);
});
}
Моя проблема в том, что мне нужно получить метаданные файла, возвращаемые этим обратным вызовом, но, кажется, нет никакого способа получить доступ к этому обратному вызову извне функции, когда используется поток.
Это работает, как и ожидалось, файл загружается:
function downloadFile(req, res){
var fileSpec = {container: 'aaa', file: 'bbb'};
var stream = .readFileToStream(fileSpec);
stream.pipe(res);
}
Это не работает, нет сообщений об ошибках и ответ, по-видимому, никогда не вызывается.
let stream = storage.readFileToStream(fileSpec, function(err, results){
if(err){
res.status(400).send({"message": "could not retrieve file"});
return;
}
stream.pipe(res);
});
Как я могу получить доступ к этому обратному вызову вместе с потоком?
1 ответ
Рекомендую использовать getBlobToStream
, Это позволяет вам писать stream
в res
напрямую, и вы можете получить доступ к BLOB-объекту results
также.
метод readFileToStream.
module.exports.readFileToStream = function(fileSpec,res){
blobService.getBlobToStream(fileSpec.container, fileSpec.file, res, function(err, results){
if(err){
console.log(err);
res.status(400).send({"message": "could not retrieve file"});
} else {
console.log(JSON.stringify(results, null, 2));
}
});
}
метод downloadFile.
function downloadFile(req, res){
var fileSpec = {container: container, file: path};
storage.readFileToStream(fileSpec,res);
}
Любые дополнительные вопросы, не стесняйтесь задавать.