Graphicsmagick 包错误

Graphicsmagick package error

我正在尝试使用 cfs:graphicsmagick 包生成缩略图,但生成的只是一张空图像。

当我启动服务器时一切正常:

I20150108-10:43:14.698(-8)? => GraphicsMagick found
I20150108-10:43:14.901(-8)? available
=> Meteor server restarted

但 gm 似乎不可用:

if (gm.isAvailable) {
    console.log("gm is available");
}

并且控制台抛出错误:

Uncaught TypeError: Cannot read property 'isAvailable' of undefined

查看 docs,似乎 gm 作用域仅在服务器端可用,所以这里没有问题,您有 console.log,很不错

现在您可以像这样在 fsCollection 上使用

Images = new FS.Collection("images", {
stores: [
  new FS.Store.FileSystem("images"),
  new FS.Store.FileSystem("thumbs", {
    transformWrite: function(fileObj, readStream, writeStream) {
      // Transform the image into a 10x10px thumbnail
      gm(readStream, fileObj.name()).resize('10', '10').stream().pipe(writeStream);
    }
  })
],
filter: {
  allow: {
    contentTypes: ['image/*'] //allow only images in this FS.Collection
  }
}
});

记住 gm 它只在服务器上可用,所以请在 /server 上使用它或在 if(isServer)

上使用它

试试这个

    if (Meteor.isServer) {
       if (gm.isAvailable) {
        console.log("gm is available and this console.log was printed from my own code");
      }
    }

告诉我是否有效

更新答案

如果您要在两个 server/client 上声明 FS.collection,我建议您像这样在 /lib/collection.js 上声明 collection

      //collections.js
      Adopcion = new FS.Collection("Adopcion", {
stores: [
  new FS.Store.FileSystem("images"),
  new FS.Store.FileSystem("thumbs", {
    transformWrite: function(fileObj, readStream, writeStream) {
      // Transform the image into a 10x10px thumbnail
      gm(readStream, fileObj.name()).resize('10', '10').stream().pipe(writeStream);
    }
  })
]
});

并在同一个文件上进行订阅 //collection.js //订阅 如果(Meteor.isClient){ Meteor.subscribe('Adopcion'); } 现在 /server/publish.js 你只需要发布功能

//Publish methods
   Meteor.publish('Adopcion', function(){
          return Adopcion.find();
        });

这样就不需要 Meteor.methods({}),meteor 会首先加载它的 collection,它们将在 client/server

上可用

看看是否适合你