我有一个函数可以成功地将流对象返回到包含来自Azure存储的所需blob的调用函数:
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);
});
如何与流一起访问此回调?
答案 0 :(得分: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);
}
还有其他问题,随时问。