Как поток работает с обратным вызовом с использованием 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);
}

Любые дополнительные вопросы, не стесняйтесь задавать.

Другие вопросы по тегам