【问题标题】:Multer not storing file to folder and is showing null in mongoDBMulter 没有将文件存储到文件夹中,并且在 mongoDB 中显示为空
【发布时间】:2019-11-20 21:45:20
【问题描述】:

我正在使用带有 multer 的 nodejs 创建一个上传到我的 shopDB mongo DB 的图像文件 当我上传图像文件并从表单发布数据时......表单中的所有内容都保存在数据库中,但图像名称显示为空,并且图像未存储在文件路径中

保存表单数据时,我在控制台中没有出现错误 除了文件上传之外,该应用程序运行良好

这就是表单内的上传方式

<div id="img">                                
<input type='file' name="uploadpostfile">
</div> 

这是我的 APP.JS

  const express = require("express");
    const router = express.Router();
    const multer = require('multer');
    const path = require("path");
    const Post = require('./models/postup');
    const uploadPath = path.join("public", Post.postImgPath);
    const bodyParser = require("body-parser");
    const imageMimeTypes = ["images/jpeg", "images/png", "images/gif"]

const upload = multer({
    dest: uploadPath,
    fileFilter: (req, file, callback) => {
        callback(null, imageMimeTypes.includes(file.mimetype) )
    }
   })
const request = require("request");
const ejs = require("ejs");
require('./models/postup')
const mongoose = require("mongoose");


mongoose.connect("mongodb://localhost:27017/shopDB");
const db = mongoose.connection
db.on('error', error => console.error(error))
db.once('open', () => console.log('Connected to Mongoose', {useNewUrlParser: true}, { useUnifiedTopology: true}))


const app = express();


app.set('view engine', 'ejs');
app.use(express.static("public"));
app.use(bodyParser.urlencoded({
    extended:true
}));
app.use(bodyParser.json());



app.post("/npost", multer(upload).single("uploadpostfile"), (req, res) => {
    let fileName = req.file != null ? req.file.filename : null
    let post = new Post({
         tag: req.body.taginput,
         title: req.body.posttitle,
         link: req.body.extlink,
         text1: req.body.textsmall,
         text2: req.body.textmedium,
         text3: req.body.textlarge,
         imgname: fileName 
    })



    post.save((err, doc) => {
        if (!err)    
            res.redirect('editor');
        else {
            console.log('Error' +err )
        }
    })

})



app.get('/', (req, res) => {
    res.render('index');
  });

app.get('/editor', (req, res) => {
    res.render('editor');
});

app.listen(3000, function(){
    console.log("Server on 3000");
})

【问题讨论】:

  • 你的req.file 肯定会得到undefined 的值,这就是为什么它只将第二个参数作为真实的结果null 作为你的文件地址。你确定你的uploadPath 是对的吗?

标签: javascript node.js mongodb mongoose multer


【解决方案1】:
You can try after saving a post, update the image.

const express = require("express");
    const router = express.Router();
    const multer = require('multer');
    const path = require("path");
    const Post = require('./models/postup');
    const uploadPath = path.join("public", Post.postImgPath);
    const bodyParser = require("body-parser");
    const imageMimeTypes = ["images/jpeg", "images/png", "images/gif"]

const upload = multer({
    dest: uploadPath,
    fileFilter: (req, file, callback) => {
        callback(null, imageMimeTypes.includes(file.mimetype) )
    }
   })
const request = require("request");
const ejs = require("ejs");
require('./models/postup')
const mongoose = require("mongoose");


mongoose.connect("mongodb://localhost:27017/shopDB");
const db = mongoose.connection
db.on('error', error => console.error(error))
db.once('open', () => console.log('Connected to Mongoose', {useNewUrlParser: true}, { useUnifiedTopology: true}))


const app = express();


app.set('view engine', 'ejs');
app.use(express.static("public"));
app.use(bodyParser.urlencoded({
    extended:true
}));
app.use(bodyParser.json());



app.post("/npost", multer(upload).single("uploadpostfile"), (req, res) => {
    let fileName = req.file != null ? req.file.filename : null
    let post = new Post({
         tag: req.body.taginput,
         title: req.body.posttitle,
         link: req.body.extlink,
         text1: req.body.textsmall,
         text2: req.body.textmedium,
         text3: req.body.textlarge,

    })



    post.save((err, doc) => {
        if (!err)    
            res.redirect('editor');
        else {
            imgname = fileName;
                post.findOneAndUpdate({ _id: doc._id }, { $set: imgname }, { 
             upsert: true, new: true }).exec((error, post) => {
            if(error) {
            res.status(500).json({ message:'internal server error' });
            } else {
            res.status(200).json({message:'image upload sucessfully.})
            console.log('Error' +err )
        }
    })

})



app.get('/', (req, res) => {
    res.render('index');
  });

app.get('/editor', (req, res) => {
    res.render('editor');
});

app.listen(3000, function(){
    console.log("Server on 3000");
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多