get a stream's content-length

В моем приложении 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 не поддерживает chunked streams.

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

15
задан JJJ 11 February 2012 в 13:56
поделиться