使用graphicsmagick在collectionFS中使用相同的读写流

时间:2015-11-22 04:01:28

标签: javascript meteor graphicsmagick collectionfs

我需要使用graphicsmagick操作图像。

我的FSCollection看起来像这样:

Images = new FS.Collection("media", {
    stores: [
        new FS.Store.FileSystem("anything"),
        new FS.Store.FileSystem("something")
    ],
});

我的问题是,writeStream应该像readStream一样。这不起作用,因为这会导致空结果:

var read  = file.createReadStream('anything'),
    write = file.createWriteStream('anything');

gm(read)
    .crop(100,100,10,10)
.stream()
.on('end',function(){ console.log('done'); })
.on('error',function(err){ console.warn(err); })
.pipe(write, function (error) {
    if (error) console.log(error);
    else console.log('ok');
});

1 个答案:

答案 0 :(得分:1)

同时读取和写入同一文件是不可能的,因为您在尝试从中读取内容时会覆盖内容。写入其他文件,然后将其重命名为原始文件。

var read  = file.createReadStream('anything'),
    write = file.createWriteStream('anything-writeTo');

gm(read)
    .crop(100,100,10,10)
.stream()
.on('error',function(err){ console.warn(err); })
.pipe(write, function (error) {
    if (error) console.log(error);
    else console.log('ok');
})
.on('end',function(){
    file.rename("anything-writeTo", "anything", function (err) {
        if (err) console.error(err);
        else console.log('rename complete');
    });
})