node.js - 流如何使用 Azure Blob createReadStream 处理回调?
问题描述
我有一个函数可以成功地将流对象返回给调用函数,其中包含我需要从 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);
});
如何随流访问此回调?
解决方案
推荐你使用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));
}
});
}
下载文件方法。
function downloadFile(req, res){
var fileSpec = {container: container, file: path};
storage.readFileToStream(fileSpec,res);
}
任何进一步的问题,请随时提问。
推荐阅读
- javascript - 为什么我不能将 AdjecentHTML 插入文本区域?
- javascript - 如何在JS中以隐藏模式运行exe?
- python-3.x - 单元测试中的 AssertionError
- sql - Conversion issue from string to decimal in redshift
- php - Problem with joining three tables in Laravel
- c# - 在 SignalR Core 的 Hub 之外访问或注入 HubCallerContext
- android - How to set major and minor grid lines using Androidplot?
- animation - 如何使用 Three.js 动画系统为相机设置动画?
- android - 安卓。是否有进入默认应用页面的意图?
- json - 如何引用文件中的单个元素?