在服务器端将集合文件从文件系统转换为 gridFS

Convert a collectionFS file from filesystem to gridFS on serverside

在我们的 meteor 应用程序中,客户端将使用 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-filesystem 集合中的文件将其转换为 CFS-gridFS 文件吗?

提前致谢。

我不明白你为什么要同时使用两者。但是我必须实现类似的东西(从 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);
            });
        });

我接受了@perusopersonale 的回答。但是,下面是我用来实现此目的的方法,基于 here and here

的文档
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);
});