繁体   English   中英

如何使用meteor和collectionfs文件系统为我的文件指定路径和文件名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM