使用 gridfs-stream 存储文件遇到的一个坑。

前一段时间参读了某个coder写的用 gridfs-stream 来存储文件,感觉不错就自己用 gridfs-stream 模块写了一个文件存储服务,但是发现存储的文件总是删不掉, 我调用的是GFS的remove api, 删除条件是用的 _id  。

  gfs.remove({_id: 'xxxxxx'}, callback);

耐着性子 查看一下源码,发现 导致问题的直接原因是因为 我没用 MongoDb 的 ObjectId 做为  _id 导致的。 我用的是自己定义的字符串。

回头找了一下gridfs-stream  的文档,终于在一段示例代码的注释里发现

_id: '50e03d29edfdc00d34000001', // a MongoDb ObjectId

  顿时一万只草泥马。。。。

 

如果一定要自定义字符串当做文件存储的_id 的话,也是有办法的, 不过要修改一下MongoDb模块的源码,在MongoDb模块 的 \lib\gridfs\grid_store.js  文件里 有个 unlinkStatic 方法,里边有一句

new GridStore(db, names, "w", options)

  改为:

new GridStore(db, names,'', "w", options)

  

 即可。 具体原因自己去看源码吧。

 

posted @ 2015-09-15 12:18  苗 ︶ㄣ  阅读(383)  评论(0编辑  收藏  举报