Как получить данные только после ресайза изображения?
Подскажите, как получить данные только после ресайза изображения.
Мне нужно создать 2-3 копии картинки, использую imagemagick.
После загрузки на той же странице необходимо вывести уменьшенную копию картинки (thumb).
Пишу так:
async.waterfall([
function(callback) {
// Тут загружаю файл и получаю данные файла
// Отправляю дальше по цепочке
callback(null, file);
},
function(file, callback) {
// В конфиге присутствуют две директории куда нужно переложить файлы
// На данном этапе мне нужно просто в имя файла добавить директорию и сохранить его там же
var obj = config.get('uploader:folders') // Получаю массив с данными размеров для каждой директории
, fileNameTmp = file.file.path.split('/').pop(); // это имя файла md5.jpg
async.each(Object.keys(obj), function( folder, callback) {
// folder = thumb|small
im.resize({
width: obj[folder].width,
height: obj[folder].height + "^",
srcPath: './' + file.file.path,
dstPath: config.get('uploader:options:tmpPath') + '/' + folder + ':' + fileNameTmp, // уменьшеная копия с директорией в названии thumb:md5.jpg
customArgs: [
"-gravity", "center",
"-extent", obj[folder].width + "x" + obj[folder].height
]
},
function(err){
if(err) return callback(err);
// Нужно передать file дальше, если создана копия thumb:md5.jpg (не или созданы все копии)
callback(null, file);
});
}, function(err, file) {
if(err) return callback(err);
// Когда копия thumb:md5.jpg создана так же передать file дальше
callback(null, file);
});
}
], function(err, file) {
if(err) return next( new HttpError(403, err));
res.statusCode = 200;
res.end(util.inspect(file));
});
Проблема заключается в том, что любые мои "махинации" приводят к тому, что ссылку на уменьшенную копию я формирую, а вот картинка (thumb) еще не успела создаться, и получается что изображения не существует.
Как быть?
Источник: Stack Overflow на русском