1

在我们的流星应用程序中,客户端将使用 collectionFS-filesystem 上传一些文件,我将其存储到我的应用程序根目录中的上传文件夹中。

//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")]
});

如何从服务器上的文件中读取数据,以便将文件存储到 db?无论如何,我可以使用 CFS-filesystem 集合中的文件将其转换为 CFS-gridFS 文件吗?

提前致谢。

4

2 回答 2

2

我接受了@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);
});                
于 2015-12-21T09:38:45.353 回答
0

我不明白你为什么要同时使用两者。但是我必须实现类似的东西(从 cfs 文件系统读取,做一些事情,然后重新插入另一个数据库),这里修改的版本应该完成你正在尝试做的事情:

       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);
            });
        });
于 2015-12-21T09:16:22.033 回答