【问题标题】:store files in mongodb using mongoose使用 mongoose 在 mongodb 中存储文件
【发布时间】:2015-01-25 20:30:21
【问题描述】:

我是 node 和 mongoDB 的新手。我正在使用 nodeJS、express 和 mongoDB 开发一个应用程序。我想从文件输入字段中读取 csv/xlsx 文件并使用 mongoose 将其存储在 mongoDB 中。我有困难。我在前端使用 angularjs。谁能给我建议我应该通过什么程序?具体代码会很有帮助。

我使用 busboy 模块将文件存储在特定文件夹中。这是我的代码

在路线中:

router.post('/fileupload', function (req, res) {
    var fstream;
    req.pipe(req.busboy);
    console.log(req.pipe);
    console.log(req.busboy);
    req.busboy.on('file', function (fieldname, file, filename) {
        console.log("Uploading: " + filename);
        fstream = fs.createWriteStream('./files/' + filename);
        file.pipe(fstream);
        fstream.on('close', function () {
            res.redirect('back');
        });
    });
});

和我的前端:

<form method="post" action="/fileupload" enctype="multipart/form-data">
    <input type="file" id="file" name="file">
    <button type="submit">Submit</button>
</form>

到目前为止,没有错误。现在我只想将这些文件存储在数据库中。 接下来我该怎么做?

【问题讨论】:

    标签: node.js mongodb file csv express


    【解决方案1】:

    您可能需要了解在 mongo 中存储文件的基础。文件为什么要存储在 mongo 中以及它们是如何存储的?

    根据您所做的,您现在需要一个 mongoose 插件,它将您上传的文件存储到 mongo GridFS 中。 GridFS 在这里:-http://docs.mongodb.org/manual/core/gridfs/。您可以使用任何兼容的驱动程序来访问网格 - mongoose 和 mongoose 插件 gridfs-stream 是一个示例 - 请参见此处:https://www.npmjs.org/package/gridfs-stream

    我使用下面的方法将文件保存到 gridfs 中。

    var express = require('express');
    var formidable = require('formidable');
    var mongoose = require('mongoose');
    var grid = require('gridfs-stream');
    var fs = require('fs');
    var util = require('util');
    var app = express();
    
    app.post('/fileupload', function (req, res) {
        var form = new formidable.IncomingForm();
        form.uploadDir = __dirname + "/data";
        form.keepExtensions = true;
        form.parse(req, function(err, fields, files) {
            if (!err) {
              console.log('File uploaded : ' + files.file.path);
              grid.mongo = mongoose.mongo;
              var conn = mongoose.createConnection('..mongo connection string..');
              conn.once('open', function () {
              var gfs = grid(conn.db);
              var writestream = gfs.createWriteStream({
                  filename: files.file.name
              });
              fs.createReadStream(files.file.path).pipe(writestream);
           });
         }        
       });
       form.on('end', function() {        
           res.send('Completed ..... go and check fs.files & fs.chunks in  mongodb');
       });
    
    });
    
    app.get('/', function(request, response){
        response.send(
            '<form method="post" action="/fileupload" enctype="multipart/form-data">'
            + '<input type="file" id="file" name="file">'
            + '<input type="submit" value="submit">'
            + '</form>'
            );    
    });
    
    app.listen(40000, function() {
        console.log('Express is listening on port 40000');
    });
    

    以上内容是关于在上传文件后应如何进行的指南,它不是生产就绪的概念证明。请注意,作为个人喜好,我将 busboy 替换为强大的。

    它有助于你继续前进吗?

    SO1

    【讨论】:

    • 感谢@SO1 的帮助.. 但我使用了不同的方法来解决这个问题.....虽然你的回答给了我一个良好的开端
    • @ishakya 愿意分享你的所作所为吗?我目前想做类似的事情。
    • @Dodekeract:我最终使用 busboy 将文件存储在文件夹结构中,如上面的代码所示。之后在插入数据库时​​我使用了 fs.readFileSync(filepath);将文件从给定的文件路径存储在 MongoDB 中。
    猜你喜欢
    • 2013-10-27
    • 2016-04-05
    • 2016-04-07
    • 2015-06-29
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多