在服务器端将集合文件从文件系统转换为 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);
});
在我们的 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);
});