使用Node.js将文件存储在MongoDB中

3

你好,我需要使用Node.js将文件存储在MongoDB中,该文件位于我的桌面上,我需要将其存储在我的MongoDB数据库中。我发现了一种叫做GridFS的东西,但不确定如何进一步操作。非常感谢任何帮助。


类似于:http://stackoverflow.com/questions/10092282/saving-files-to-mongodb-gridfs-with-node-js。顺便说一句,@Daniel的回答没有涉及到适用于大对象的GridFS。 - Geert-Jan
2个回答

4
如果您的文件大小超过16MB,Mongo的最大文档大小,您必须使用gridFS来存储文件到数据库中。
这里有一个非常有用的原因概述,解释了为什么要使用gridFS: http://docs.mongodb.org/manual/faq/developers/#faq-developers-when-to-use-gridfs 在Node中实现时(如果使用原生mongo驱动程序):
var  mongodb = require('mongodb')
   , MongoClient = mongodb.MongoClient
   , Grid = mongodb.Grid //use Grid via the native mongodb driver
   ;

一旦您设置好了连接,当涉及将文件写入gridFs时

var grid = new Grid(db, 'fs'); //db being a handle to your database

var buffer = //read the file in to a buffer

//write the buffer out to mongo
grid.put(buffer, {metadata:{category:'text'}, content_type: 'text'}, function(err, fileInfo) {
 if(err) {
   //handle any errors here
 }
});

@Rob-我会尝试并很快更新。非常感谢你的建议。 - Amanda G

2

虽然我不建议在Mongo中存储大型文件,但较小的文件将更好。

如果是文本文件,只需读取文件的文本内容;如果是二进制格式(例如可执行文件),则需要读取二进制数据。您可以使用fs库来读取文件并相应地进行编码。

然后将存储在变量中的数据插入数据库。

var fs = require('fs');

// Read file with proper encoding...
var data = //...

// Insert into Mongo
mongo.insert({file: data});

当您想从数据库中检索文件时,您需要执行相反的操作。编码/解码过程取决于文件类型。


fs会读取文件的内容,但我的要求是将整个文件(比如name.txt)原封不动地存储到我的mongodb中。你有什么想法吗? - Amanda G
@AmandaG 你无法将一个文件直接存储到数据库中,因为这是文件系统的工作。你需要将文件的内容存储在数据库中。 - Daniel
@AmandaG 你可以拥有一个简单的集合:files,其中包含filenamecontents键,这将“复制”在文件系统中拥有它的效果(有点类似)。 - Daniel
我将文件内容存储到一个变量中,并将该变量保存到mongodb中,即数据,但是当我尝试检索时,我得到了以下输出请求参数:'[object Object]',我没有得到我存储的数据。对此有任何想法将非常有帮助。 - Amanda G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接