2014-09-12 4 views
-1

Я все еще новичок в узле, так что медведь со мной.Как изменить размер изображения из mongo gridfs

У меня есть изображения, хранящиеся в mongo gridfs. как изменить размер потока изображений? Я пытаюсь использовать ffmpeg. вот мой метод:

exports.read = function (req, res) { 
var db = mongoose.connection.db; 
var id = new ObjectID(req.params.imageId); 
var store = new GridStore(db, id, 'r', {root: 'fs'}); 

store.open(function (err, store) { 
    if (err) return err; 

    res.header("Content-Type", store.metadata['Content Type']); 
    res.header("Content-Disposition", "attachment; filename='" + store.filename + "'"); 

    new ffmpeg() 
     .input(store.stream(true)) 
     .size('650x365') 
     .output('/temp/screenshot.png') 
     .run(); 

    store.stream(true).pipe(res) 
}); 
}; 

но я получаю сообщение об ошибке:

Ошибка: FFmpeg завершался с кодом 1: трубы: 0: Неверные данные, найденные при обработке входных данных.

что я делаю неправильно?

ответ

1

Вы прокладываете поток GridStore до res до того, как ffmpeg может завершить работу, что может привести к любым непредсказуемым результатам. Кроме того, поток, который вы подключаете к res, является вашим GridStore, а не выходом ffmpeg. Таким образом, даже если ffmpeg работает правильно, вы получите исходное изображение, а не его размер.

Это было время, так как я использовал GridStore и ffmpeg поэтому я немного ржавый, но я взял быстрый взгляд на документы, и я думаю, что вы хотите что-то вроде этого:

Примечание: Я предполагаю, что вы используете fluent-ffmpeg

store.open(function (err, store) { 
    if (err) return err; // !! NOTE: This return won't do anything... you should handle the error condition differently !! 

    res.header("Content-Type", store.metadata['Content Type']); 
    res.header("Content-Disposition", "attachment; filename='" + store.filename + "'"); 

    ffmpeg() // You shouldn't need "new" here 
     .input(store.stream(true)) 
     .size('650x365') 
     .pipe(res); 
}); 

Этот код потокового вывода из ffmpeg непосредственно res, который устраняет необходимость временного файла и упрощает т кривых довольно много.

Примечание: Я не рекомендую использовать этот подход ни на чем, кроме прототипа или крайне низкого трафика. Накладные расходы на изменение размера изображения по каждому запросу будут большими; вы должны кэшировать измененное изображение и возвращать его.

+0

спасибо Майку С. Я все еще прототипирую и пытаюсь понять вещи. Еще раз спасибо за ваш совет. – CurlyFro

+0

Рад, что я мог бы помочь :) –

Смежные вопросы