我想直接在带有Node.js的MongoDB中保存和检索大小为1 MB的Word doc和PDF文件。我怎么能这样做是否有任何文章解释它或可以有人帮助我。
答案 0 :(得分:0)
以下是将文件保存为MongoDB中的二进制数据的独立节点js代码。由于最大文件大小为1MB,您可以将其保存在普通集合中而不是GridF中。
这可以扩展为使用" express"作为网络应用程序运行或" hapi"构架。您可能需要参考相应的教程。
将文件保存为MongoDB中的二进制数据: -
注意:我在" docs"中有示例文件。目录。所以,我用docs(即" /docs/testplan.docx")作为前缀。如果您不需要,可以删除它。
var MongoClient = require('mongodb').MongoClient;
var Binary = MongoClient.Binary;
var fs = require('fs');
var assert = require('assert');
var url = 'mongodb://localhost:27017/test';
var binaryFileData = fs.readFileSync(__dirname + "/docs/testplan.docx");
var insertDocument = function(db, callback) {
db.collection('file_save').insertOne( {
"fileName" : "testplan.docx",
"fileData" : binaryFileData
}, function(err, result) {
assert.equal(err, null);
console.log("Inserted a document into the collection.");
callback();
});
};
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
insertDocument(db, function() {
console.log("Closing the database connection...")
db.close();
});
});
读取文件数据并将其保存到磁盘: -
var MongoClient = require('mongodb').MongoClient;
var Binary = MongoClient.Binary;
var fs = require('fs');
var assert = require('assert');
var url = 'mongodb://localhost:27017/test';
var findDocument = function (fileName, db, callback) {
db.collection('file_save').findOne({"fileName" : fileName }, function (err, document) {
assert.equal(null, err);
console.log(document.fileName);
fs.writeFileSync("testplan_out.docx", document.fileData.buffer);
console.log("File has been written to disk");
callback();
});
};
MongoClient.connect(url, function (err, db) {
assert.equal(null, err);
findDocument("testplan.docx", db, function () {
db.close();
});
});
答案 1 :(得分:0)
完美无缺!但我正在尝试从 POSTMAN 上传文档,我正在使用 MEAN堆栈开发我的项目。
//document-model.js
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var documentSchema = {
docFile: {
type: String
}
};
mongoose.model('FileDocument', documentSchema);
//document-route.js
var express = require('express'),
documentRoute = express.Router(),
document = require('../controllers/document-controller');
documentRoute.post('/upload', document.uploadDocument);
module.exports = documentRoute;
//document-controller.js
var document = {
uploadDocument: function (req, res) {
var fileDocument = new FileDocument({
docFile: req.body.docFile
});
fileDocument.save(function (err, result) {
if (err) {
res.status(500).send(err);
} else {
res.status(200).send('Document Uploaded Successfully');
}
});
}
};
我正在尝试这种方式,但它没有上传到mongodb,结果是在mongo shell中提供的。
{ "_id" : ObjectId("59693872b8b83f42b42a3b9f"), "docFile" : "", "__v" : 0 }