直接在Mongodb上载doc文件

时间:2017-07-12 01:09:45

标签: node.js mongodb file-upload

我想直接在带有Node.js的MongoDB中保存和检索大小为1 MB的Word doc和PDF文件。我怎么能这样做是否有任何文章解释它或可以有人帮助我。

2 个答案:

答案 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 }