Получить длину содержимого потока
В моем приложении node.js я использую gm (графическая оболочка) и 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 записать его на диск, прочитать файл как поток и затем поместить его на амазонку с длиной содержимого временного файла?
Ответы
Ответ 1
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) {
// .....
});
});
});
Ответ 2
Это зависит от того, как вы выполняете загрузку. Я использую express.js, и я получаю длину от объекта req.files, как этот req.files. [Имя файла ввода].length.
Я на самом деле пытаюсь сделать то же самое, но у меня проблема с aws2js, распознающим поток. сообщите мне, если вы заработаете.