【问题标题】:Upload and retrieve text/pdf/img files on mongodb using mongoose in a MEAN stack application在 MEAN 堆栈应用程序中使用 mongoose 在 mongodb 上上传和检索 text/pdf/img 文件
【发布时间】:2017-08-07 15:10:19
【问题描述】:

我一直在尝试编写一段代码,其中用户创建一个动态url,通过点击页面上的按钮上传文件,用户也可以下载相同格式的相同文件,当他/她再次访问相同的网址。这个概念很像cl1p,区别在于文件而不是文本。

我在 SO 上找到了很多答案,但我找不到任何关于如何在角度 controller 中接受文件并传递到后端(node.js 代码)的帮助,其中可以使用 mongoose 将文件保存在 mongodb 数据库中,并且可以从 mongodb 数据库中检索相同的文件。另外,我希望将完整的文件保存在数据库中,而不仅仅是文件的路径/目标。

请帮忙。

到目前为止,我只有 -

<div ng-controller="main">
<input type="file" name="myFile" id="file" />
<button type="submit">Upload</button>
</div>

PS:不要要求我使用GridFS,它在数据超过16MB的情况下很有用,我的文件大小不会超过2~3MB。

【问题讨论】:

    标签: javascript angularjs node.js express mongoose


    【解决方案1】:

    我对角度不太熟悉。但是,我可以在后端给出一些提示。

    model.js

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    
    var schema = new Schema({
      image: {data: Buffer, contentType: String},
        .
        .
    });
    
    module.exports = mongoose.model('Model', schema);   
    

    route.js

    var Model = require('path/to/model');
    
    // POST: called by uploading form
    router.post('/add', function (req, res, next) {
    
      var model = new Model();
    
      fs.readFile(req.body.myFile, function (err, data) {
    
        model.image.data = data;
        // get extension
        model.image.contentType = req.body.myFile.split('.').pop();
            .   
            .
        model.save(function (err, model) {
          if(err) throw err;
          res.status(201).json(model);
        });
    
      });
    });
    
    // GET image by model id: subsequence retrieval
    router.get('/:id/image', function (req, res, next) {
      var modelId = req.params.id;
      Model.findById(modelId, function (err, model) {
        res.contentType(model.image.contentType);
        res.json(model.image.data);
      });
    });
    

    【讨论】:

    • 这是该过程的第二部分。我仍在为控制器部分苦苦挣扎。无论如何,谢谢你的帮助。
    【解决方案2】:

    我用https://github.com/expressjs/multer 为我工作,特别是如果您以后想将它存储在数据库以外的任何其他地方。

    如果您使用 Angular 1,则在客户端使用 https://github.com/nervgh/angular-file-upload

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 2017-09-20
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多