簡體   English   中英

在服務器端將collectionFS文件從文件系統轉換為gridFS

[英]Convert a collectionFS file from filesystem to gridFS on serverside

在我們的流星應用程序中,客戶端將使用collectionFS文件系統上傳一些文件,我將其存儲到應用程序根目錄中的上載文件夾中。

//My CFS uploads collection
uploads = new FS.Collection("uploads", {
    stores: [new FS.Store.FileSystem("uploads", {path: "~/uploads"})]
});

稍后,我想使用collectionFS-gridFS將文件保存到數據庫。

//My CFS grid collection
files = new FS.Collection("files", {
    stores: [new FS.Store.GridFS("files")]
});

如何從服務器上的文件讀取數據,以便可以將文件存儲到數據庫? 無論如何,我是否可以使用CFS文件系統集合中的文件將其轉換為CFS-gridFS文件?

提前致謝。

我已經接受@perusopersonale的回答。 但是,以下是我用來實現此目標的方法,該方法基於此處此處的文檔

uploads.find(document_id).forEach(function (fileObj) {
  var type = fileObj.type();
  var name = fileObj.name();
  var readStream = fileObj.createReadStream(fileObj.collectionName);
  var newFile = new FS.File();
  newFile.attachData(readStream, {type: type});
  newFile.name(name);
  files.insert(newFile);
});                

我不明白您為什么要同時使用兩者。 但是,我必須實現類似的操作(從cfs文件系統讀取,執行某些操作,然后重新插入另一個db),這里修改了一個版本,可以完成您要執行的操作:

       var fileObj = uploads.findOne(objId);
       var newName = "newfilename"; //file name
       //fileObj.copies.uploads.key contains the filename for store :"uploads"
       fs.readFile( "~/uploads/"+fileObj.copies.uploads.key, function (err, data) {
           var newFile = new FS.File();
           newFile.attachData(data,{type: 'application/octet-stream'}, function(error){
              newFile.name( newName);
              file.insert(newFile);
            });
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM