流如何与使用Azure Blob createReadStream的回调一起使用?

时间:2018-06-20 23:24:58

标签: node.js azure azure-storage azure-storage-blobs

我有一个函数可以成功地将流对象返回到包含来自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);

  });

如何与流一起访问此回调?

1 个答案:

答案 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);
}

还有其他问题,随时问。