2014-07-11 32 views
3

我正在使用CollectionFS存儲從我的流星應用上傳的文件。我正在使用cfs-filesystem包來使用本地文件系統保存我的文件。如何使用流星和collectionfs文件系統爲我的文件指定路徑和文件名

現在,當我上傳文件,它就會被保存到〜/上傳/圖像 - h9jWnALqSZMpAX4h4-IMG_3737.JPG

我有一個現有的文件系統結構,我需要繼續努力,我們需要的文件如有必要,用手輕鬆移動。

假設我想自定義該路徑是這樣的〜/ uploads/jaredtmartin/IMG_3737.jpg。當不同的用戶上傳時,它會以他的名字進入一個新文件夾,例如〜/ uploads/suzyq/IMG_1234.jpg。可以這樣做嗎?如果不是,我可以在哪裏修改代碼以實現它?

+0

您是否找到解決問題的方法?我有同樣的問題,下面的答案不顯示如何爲每個用戶創建目錄。 – lowi

回答

3

您可以使用fileKeyMaker,看到here

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); 
    } 
}); 
+0

請提供全文而不是鏈接,否則此答案將被社區刪除。 – amphetamachine

0

我發現了一個簡單的解決方案(恕我直言)

在存儲適配器,你可以做這樣的事情的聲明:

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屬性等命名。在上面的例子中,我沒有保存擴展名,但我認爲你明白了。爲了清楚起見,我刪除了這些。如果你需要這些代碼,請告訴我。我擁有它。
現在這實際上並沒有將圖像放在不同的文件夾中,但它確實允許您爲文件命名。

相關問題