![](/img/trans.png)
[英]In Meteor, how can I link a collectionFS image to the right document?
[英]How can I specify a path and filename for my files with meteor and collectionfs filesystem
我正在使用CollectionFS来存储从我的meteor应用程序上传的文件。 我正在使用cfs-filesystem包来使用本地文件系统保存我的文件。
现在,当我上传文件时,它会被保存到〜/ uploads / images-h9jWnALqSZMpAX4h4-IMG_3737.JPG
我有一个我需要使用的现有文件系统结构,如果需要,我们需要手动遍历文件。
假设我想要自定义该路径〜/ uploads / jaredtmartin / IMG_3737.jpg。 当一个不同的用户上传时,它会转到一个带有他名字的新文件夹,例如〜/ uploads / suzyq / IMG_1234.jpg。 可以这样做吗? 如果没有,我在哪里可以深入修改代码以实现它?
您可以使用fileKeyMaker
,请参阅此处
var imageStore = new FS.Store.FileSystem("images", {
fileKeyMaker: function (fileObj) {
// Lookup the copy
var store = fileObj && fileObj._getInfo(name);
// If the store and key is found return the key
if (store && store.key) return store.key;
// TO CUSTOMIZE, REPLACE CODE AFTER THIS POINT
var filename = fileObj.name();
var filenameInStore = fileObj.name({store: name});
// If no store key found we resolve / generate a key
return fileObj.collectionName + '-' + fileObj._id + '-' + (filenameInStore || filename);
}
});
我找到了一个更简单的解决方案(恕我直言)。
在存储适配器的声明中,您可以执行以下操作:
var photoStore = new FS.Store.FileSystem("photos", {
transformWrite: function(fileObj, readStream, writeStream) {
gm(readStream, fileObj.name).resize(100,100,"^").gravity('Center').crop(100,100).quality(100).autoOrient().stream().pipe(writeStream);
},
beforeWrite:function (fileObj) {
var post = Posts.findOne(fileObj.postId);
if (post.type==='Dog') return {name:slugify(post.name)};
else return {name:slugify(post.title)};
},
});
在此示例中,我的一些图像使用name属性命名,其他图像使用title属性命名。 在上面的例子中,我没有保留扩展,但我认为你明白了。 为清楚起见,我删除了 如果您需要该代码,请告诉我。 我有它。
现在这实际上并没有将图像放在不同的文件夹中,但它确实允许您命名文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.