Как создать новое изображение на сервере и вставить его в коллекцию [используя Meteor/CollectionFS + GridFS]?CollectionFS: вставить изображение, сгенерированное на сервер
Вики объясняет how to insert from a stream on the server
var readStream = spawn('ls', []).stdout;
var newFile = new FS.File();
newFile.attachData(readStream, {type: 'text/plain'});
newFile.name('ls_result.txt');
Files.insert(newFile);
... но как я создаю ReadStream для типа [изображение/PNG]?
--------------------------- {изменить} --------------- ------------
Я попытался это:
var fs = Npm.require('fs');
var writeStream = fs.createWriteStream('test.png');
gm(200, 200, '#000F')
.setFormat('png')
.fill('black')
.drawCircle(10, 10, 190, 190)
.stream('png')
.pipe(writeStream);
var readStream = fs.createReadStream('test.png');
// ...insert as above
... который создает файл test.png
, но он не имеет данных (0 байт). Таким образом, вставка выходит из строя с ошибкой unknown filesize
.
--------------------------- {изменить 2.0} -------------- -------------
Пробовал после чего чувствует себя как решение мне нужно ... но он не в подобной манере:
gm(200, 200, '#000F')
.setFormat('png')
.fill('black')
.drawCircle(50, 50, 60, 60)
.toBuffer('PNG', Meteor.bindEnvironment(function(error, buffer)
{
if(error) throw error;
var file = new FS.File();
file.attachData(buffer, {type: 'image/png'}, function(err)
{
if(err) throw err;
file.name('test.png');
Collections.Builds.insert(file);
});
})
);
Это бросает ошибку :
I20150520-16:29:10.379(-5)? Exception in callback of async function: Error: Stream yields empty buffer
I20150520-16:29:10.379(-5)? at Socket. (/Users/andrew/.meteor/packages/cfs_graphicsmagick/.0.0.18.rl55ru++os+web.browser+web.cordova/npm/node_modules/gm/lib/command.js:65:17)
I20150520-16:29:10.379(-5)? at Socket.emit (events.js:117:20)
I20150520-16:29:10.379(-5)? at _stream_readable.js:944:16
I20150520-16:29:10.379(-5)? at process._tickCallback (node.js:442:13)
... который, кажется, предполагает, что проблема связана с графикой.