Javascript FS.存储不可靠的gm图像转换
下面的代码大部分时间都能正常工作,但有时会生成零字节图像。我怀疑是流中缩放图像的部分。Javascript FS.存储不可靠的gm图像转换,javascript,meteor,imagemagick,Javascript,Meteor,Imagemagick,下面的代码大部分时间都能正常工作,但有时会生成零字节图像。我怀疑是流中缩放图像的部分。.sample(…)。谢谢你的帮助 function scaleToTargetByInt (width) { var maxWidth = 216 * 2; // 2x thumbnail size optimized for Retina display var originalWidth = width; var scaleInt = Math.floor(maxWidth/ori
.sample(…)
。谢谢你的帮助
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);
}
});
删除
var
关键字。
在更新时,我们应该从一些文档中传递。\u id
,如果不是,mongo现在将如何上传哪个文档
试一试
fileObj.update({_id:this._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);
}
});
谢谢@Ethaan,但是建议的更改(删除
var
,添加{{u id:fileObj.\u id}
)并没有改善某些方面。使用原始代码我得到这个错误W20150204-00:00:15.775(-8)?(标准)stream.js:94 W20150204-00:00:15.775(-8)?(标准)投掷器;//管道中存在未处理的流错误。
请执行此操作console.log(fileObj)
我很确定fileObj是未定义的,这W20150204-00:00:15.776(-8)?(STDERR)错误:enoint,打开“/Users/kai/eboydb/.meteor/local/cfs/files/_tempstore/MyPix-LEPFsPyjCs6H9Y5iy-0.chunk”
也可以尝试使用$push
而不是$set
我不明白,为什么有时候它会工作@埃桑
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);
}
});