получить длину содержимого потока - PullRequest
14 голосов
/ 11 февраля 2012

В моем приложении node.js я использую gm (оболочка graphicsmagick) и aws2js (оболочка amazon cli) .Проблема в том, что Amazon нужно знать длину контента, чтобы я мог поместить поток на S3.

Я загружаю изображение в свое приложение, прочитайте этот файл, создав поток:

var fileStream=fs.createReadStream(file.path)

Я передаю этот файл в gm, изменяю его размер и затем сообщаю его для потоковой передачи этого файла.Затем я хочу поместить этот поток в aws:

gm( fileStream, "some.png" ).                               
    identify({bufferStream: true}, function(err, info) {
        this.stream("png", function (err, stdout, stderr) {
            if (err){console.log(err);cb(err);return;}

            aws.S3.putStream(path, stdout, 'public-read', {'content-length': ?????, 'content-type': 'image/png'}, function (err, result) {
            .....       
            }
        });
    });
});

Проблема заключается в том, что Amazon необходимо знать длину содержимого (а не библиотеки), чтобы поместить поток.AWS не поддерживает фрагментированные потоки.

Кто-нибудь знает, как я могу определить длину содержимого потока?Или единственное решение состоит в том, чтобы tmp записал его на диск, прочитал файл в виде потока и затем поместил его в amazon с длиной содержимого временного файла?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2013
gm( fileStream ).filesize({bufferStream: true}, function (error, filesize) {
  this.stream(function (error, stdout, stderr) {
    aws.S3.putStream(path, stdout, 'public-read', {'content-length': filesize, 'content-type': 'image/png'}, function (error, result) {
      // .....       
    });
  });
});
1 голос
/ 11 февраля 2012

Это зависит от того, как вы делаете загрузку.Я использую express.js, и я получаю длину от объекта req.files, как этот req.files. [Имя входного файла] .length.

На самом деле я пытаюсь сделать то же самое, но у меня проблема с распознаванием потока aws2js.дайте мне знать, если у вас все получится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...