【问题标题】:Uploading multer files (nodejs) to Mongo database将multer文件(nodejs)上传到Mongodb数据库
【发布时间】:2016-10-20 07:01:30
【问题描述】:

我遵循了一个关于如何使用 multer 在 node js 中上传文件的教程,并且不久前才开始学习 node js 和 express js,所以我是这方面的初学者。作为教程的结果,当我在我的 index.ejs 中单击提交以上传图像/音乐文件时,我可以在我的终端中看到该文件已上传详细信息,并且当我检查我的 ./public/uploads文件夹,里面也放了一个文件。

我现在想知道的是,如何获取这些数据并将其放入我的 mongo 数据库中,以及如何在我的 index.ejs 中查看这些图像或播放这些音乐文件?我还没有设置猫鼬,但我会的。到目前为止我的代码:

我的 app.js

var express = require('express'); //to require express.js
var multer = require('multer'),  //to require multer for uploading photos
    bodyParser = require('body-parser'), //to require body-parser to grab json form data
    path = require('path');

var upload = multer({ dest: 'public/uploads/' }) //giving upload a destination directory

var app = express();  //to use express
app.use(bodyParser.json());
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(__dirname + '/public'));  //to use style.css
app.set('view engine', 'ejs'); //to use ejs as template language
// app.use(bodyParser.urlencoded({ extended: false })); //to use body parser

app.get('/', function(req, res){  //using express for routing and printing out content
    res.render('index');  //render it in html. In ejs, display what we want to display
})

app.post('/', multer({ dest: './public/uploads/'}).single('upl'), function(req,res){
    console.log(req.body); //form fields
    console.log(req.file); //form files
    res.status(204).end();
});

app.listen(3000,function(){  //using express to load the server
  console.log('Pulse on port 3000!');
})

索引.ejs

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Pulse</title>
  </head>
  <body>

    <h1> Hi </h1>

    <form action="/" enctype="multipart/form-data" method="post">
      <input type="text" name="title">
      <input type="file" name="upload">
        <input type="submit" value="Upload">
    </form>


  </body>

</html>

【问题讨论】:

标签: javascript node.js mongodb express mongoose


【解决方案1】:

您正在尝试做的是利用文件系统存储机制。 Multer 为您提供了一个选项来选择保存文件的目标位置,您现在可以在文件存储后提取文件名(操作选项也在那里)将文件的 url 传递给您的特定函数并从那里保存其位置在你的 mongo 数据库中。

检索图像的 url 并执行所需的操作。

代码示例

app.post('/yourlink', fileuploadfunc.single('filename'), function1, routename.functionname);

function1 - 上传完成后调用 routename - 在 function1 执行后调用

如果你不使用路由,那么在 function1 中你可以做任何你想做的事情。

【讨论】:

    【解决方案2】:
    var storage = multer.diskStorage({
    destination: function (req, file, cb) {
     cb(null, './uploads/');
        },
     filename: function (req, file, cb) {
        var originalname = file.originalname;
        var extension = originalname.split(".");
        filename = Date.now() + '.' + extension[extension.length-1];
        cb(null, filename);
      }
    });
    
    router.post('/', multer({storage: storage, dest: './uploads/'}).single('uploads'), function(req,res){
      var music = new Music ({
        fieldname: req.file.fieldname,
        originalname: req.file.originalname,
        encoding: req.file.encoding,
        mimetype: req.file.mimetype,
        destination:req.file.destination,
        filename: req.file.filename,
        path: req.file.path,
        size: req.file.size
      })
      music.save(function(err){
        if (err){console.log(err)}
        else {
          res.redirect('/');
        }
      })
    });
    

    型号

    var mongoose = require('mongoose');
    
    var musicSchema = new mongoose.Schema({
      fieldname: String,
      originalname: String,
      encoding: String,
      mimeptype: String,
      destination: String,
      filename: String,
      path: String,
      size: Number,
      created_at: Date,
      updated_at: Date
    });
    var Music = mongoose.model('Music', musicSchema);
    
    module.exports = Music;
    

    根据死亡笔记所说的,这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2020-07-16
      相关资源
      最近更新 更多