首页 > 解决方案 > 流如何使用 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);

  });

如何随流访问此回调?

标签: node.jsazureazure-storageazure-blob-storage

解决方案


推荐你使用getBlobToStream。它允许您直接写入streamres您也可以访问 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);
}

任何进一步的问题,请随时提问。


推荐阅读