2

我有一个将文件保存到gridfs的功能。它在重构后不知何故停止了偶尔的工作,我花了 2 个多小时茫然地盯着它。我发誓它和原来的差不多。我似乎记得在我添加关闭之前它一开始不起作用,然后它开始起作用,但它可能是失眠。本质上问题是 db.fs.files 集合没有任何记录,但是块被添加到 db.fs.chunks。

data是通过 fs.readFile() 从磁盘加载的缓冲区

 31    var gs = new mongodb.GridStore(this.db, filename, "w", {
 32        "chunk_size": 1024*4,
 33        metadata: {
 34          hashpath:gridfs_name,
 35          hash:hash,
 36          name: name
 39        }
 40    });
 41    gs.open(function(err,store) {
 42       gs.write(data,function(err,chunk) {
 43          //cb(err,hash,chunk);
 44          //self.close();
 45       });
 46    });
4

1 回答 1

6

有几个解决方案。您可以使用 writeBuffer、writeFile 或新的简单网格类。下面是您的示例针对使用缓冲区实例的事实进行了调整。

// You can use an object id as well as filename now
var gs = new mongodb.GridStore(this.db, filename, "w", {
  "chunk_size": 1024*4,
  metadata: {
    hashpath:gridfs_name,
    hash:hash,
    name: name
  }
});

gs.open(function(err,store) {
  // Write data and automatically close on finished write
  gs.writeBuffer(data, true, function(err,chunk) {
    // Each file has an md5 in the file structure
    cb(err,hash,chunk);
  });
});

一般来说,最好的起点是涵盖 gridfs 类的广泛使用配置文件的测试。看着。

https://github.com/christkv/node-mongodb-native/tree/master/test/gridstore

于 2011-08-04T05:23:24.753 回答