Одинаковый поток чтения и записи в collectionFS с использованием graphicsmagick

Мне нужно манипулировать изображением, используя graphicsmagick,

Моя коллекция FSC выглядит так:

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 ответ

Решение

Одновременное чтение и запись в один и тот же файл невозможны, поскольку вы будете перезаписывать содержимое одновременно с попытками чтения из него. Запишите в другой файл, а затем переименуйте его в исходный.

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');
    });
})
Другие вопросы по тегам