将multer文件(nodejs)上传到Mongo数据库

时间:2016-06-18 15:17:55

标签: javascript node.js mongodb express mongoose

我遵循了一个关于如何使用multer上传节点js中的文件的教程,并且不久前才开始学习节点j并表达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!');
})

Index.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>

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:0)

您要做的是利用文件系统存储机制。 Multer为您提供了选择保存文件目的地的选项,您可以在文件存储后提取文件的名称(操作选项也在那里),将文件的URL传递给您的特定功能,然后保存其位置在你的mongo db中。

检索图片的网址并执行所需操作。

代码示例

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

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

如果您没有使用路线,那么在功能1中,您可以做任何您想做的事。