2015-02-03 2 views
0

Этот код работает большую часть времени, но иногда он генерирует нулевые байтовые изображения. Я подозреваю, что это часть потока, где изображение масштабируется .sample(...). Спасибо за любую помощь!FS.Store ненадежное преобразование изображений gm

function scaleToTargetByInt (width) { 
    var maxWidth = 216 * 2; // 2x thumbnail size optimized for Retina display 
    var originalWidth = width; 
    var scaleInt = Math.floor(maxWidth/originalWidth); 
    var scaleSize = scaleInt * originalWidth; 
    return scaleSize; 
} 

var OriginalsStore = new FS.Store.FileSystem("OriginalPix", { 
    path: pathToOriginalsFolder, 

    transformWrite: function (fileObj, readStream, writeStream) { 

     // read image dimensions and write to metadata 
     gm(readStream) 
     .size({bufferStream: true}, FS.Utility.safeCallback(function (err, size) { 
      if (err) { 
       // handle the error 
      } else { 
       fileObj.update({$set: {'metadata.width': size.width, 'metadata.height': size.height}}); 
      } 
     })) 
     // read metadata.width and scale acordingly 
     .sample(scaleToTargetByInt(fileObj.metadata.width)) 
     .stream() 
     .pipe(writeStream); 
    } 
}); 

ответ

0

Удалить ключевое слово var. , и при обновлении мы должны передать ._id из какого-то документа, если не так, как сейчас будет добавлен какой-нибудь документ в формате mongo?

попробовать с

fileObj.update({_id:this._id},{$set: {'metadata.width': size.width, 'metadata.height': size.height}}); 

или

fileObj.update({_id:fileObj._id},{$set: {'metadata.width': size.width, 'metadata.height': size.height}}); 

код должен выглядеть следующим образом.

OriginalsStore = new FS.Store.FileSystem("OriginalPix", { 
    path: pathToOriginalsFolder, 

    transformWrite: function (fileObj, readStream, writeStream) { 

     // read image dimensions and write to metadata 
     gm(readStream) 
     .size({bufferStream: true}, FS.Utility.safeCallback(function (err, size) { 
      if (err) { 
       // handle the error 
      } else { 
       fileObj.update({_id:fileObj._id},{$set: {'metadata.width': size.width, 'metadata.height': size.height}}); 
      } 
     })) 
     // read metadata.width and scale acordingly 
     .sample(scaleToTargetByInt(fileObj.metadata.width)) 
     .stream() 
     .pipe(writeStream); 
    } 
}); 
+0

Спасибо @Ethaan, но предложенные изменения (удаление 'var', добавление' {_id: fileObj._id} ') не улучшают что-то. Используя исходный код, я получаю эту ошибку 'W20150204-00: 00: 15.775 (-8)? (STDERR) stream.js: 94 W20150204-00: 00: 15.775 (-8)? (STDERR) throw er; // Ошибка необработанного потока в трубе. – Kai

+0

сделайте это пожалуйста. 'console.log (fileObj)' im довольно уверен, что файлObj не определен – Ethaan

+0

Плюс этот 'W20150204-00: 00: 15.776 (-8)? (STDERR) Ошибка: ENOENT, open '/ Users/kai/eboydb/.meteor/local/cfs/files/_tempstore/MyPix-LEPFsPyjCs6H9Y5iy-0.chunk'' – Kai

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