2017-07-12 102 views
-2

我想用Node.js直接在MongoDB中保存和檢索大小爲1 MB的Word文檔和PDF文件。我該如何做到這一點是否有任何文章解釋或可以幫助我解決這個問題。直接在Mongodb上傳文檔文件

回答

0

這裏是獨立節點js代碼將文件保存爲MongoDB中的二進制數據。由於最大文件大小爲1MB,因此您可以將其保存在普通收藏夾中而不是GridF中。

這可以擴展爲使用「express」或「hapi」框架作爲網絡應用程序運行。您可能需要參考相應的教程。

將文件保存爲MongoDB中的二進制數據: -

注:我在「文檔」目錄中的樣本文件。所以,我在文檔前添加了文檔(即「/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(); 
    }); 
}); 
+0

你可以請讓我知道如何做你可以看到我的代碼如下 – Arjun

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的結果是給出了蒙戈外殼。

{ "_id" : ObjectId("59693872b8b83f42b42a3b9f"), "docFile" : "", "__v" : 0 }