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
上可用
看看是否适合你
我正在尝试使用 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
看看是否适合你