繁体   English   中英

无法使用 Multer 将图像上传到 NodeJs 服务器

[英]Can not upload image to NodeJs server using Multer

我正在尝试将图像上传到服务器并将其存储在单独的文件夹中。 我正在提交附有图像的多部分表单,但我没有收到任何错误,即使我尝试提交空表单,响应也总是成功的。 有什么建议为什么它不起作用?

controller.js

const multer = require('multer');
const shortid = require('shortid');

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
        cb(null, "/home/username/projects/data/img/"); // Static route to save images
        console.log("DESTINATION CB: " + cb);
    }, 
    filename: function (req, file, cb) { 
        cb(null, shortid.generate() +".jpg");
    } 
});
       
const maxSize = 10 * 1000 * 1000; // 10 MB Max Picture size
    
var upload = multer({  
    storage: storage, 
    limits: { fileSize: maxSize }, 
    fileFilter: function (req, file, cb){ 
        // Set the filetypes, it is optional 
        var filetypes = /jpeg|jpg|png/; 
        var mimetype = filetypes.test(file.mimetype); 

        var extname = filetypes.test(path.extname(file.originalname).toLowerCase()); 

        if (mimetype && extname) { 
            return cb(null, true); 
        }
      
        cb("Error: File upload only supports the " + "following filetypes - " + filetypes); 
      }  
}).single('image');

module.exports = {
    createBlog: function(req, res, next) {
        upload(req, res, function(err) {
            if (err instanceof multer.MulterError) {
                res.json({status: "Error", error_message: "Some kind of error with image"});
            } else {
                res.json({status: "Success", success_message: "Image uploaded successfully."});
            }
        });
    }
};

路由.js

const express = require('express');
const router = express.Router();
const controller = require('../app/api/controllers/controller');

router.post('/blog/create', controller.createBlog)

module.exports = router;

服务器.js

const express = require('express'); 
const logger = require('morgan');

const route = require('./routes/route');

const bodyParser = require('body-parser');
const mongoose = require('./config/database'); // DB configuration
const app = express();

// Connection to mongodb
mongoose.connection.on('error', console.error.bind(console, 'MongoDB connection error:'));
mongoose.set('useFindAndModify', false);

app.use(bodyParser.json({limit: "50mb"}));
app.use(logger('dev'));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit: 50000}));

app.use('/blogx', route);

app.get('/favicon.ico', function(req, res) {
    res.sendStatus(204);
});

// Handle 404 error
app.use(function(req, res, next) {
        let err = new Error('Not Found!');
        err.status = 404;
        next(err);
});

// Handle errors
app.use(function(err, req, res, next) {
        console.log(err);
        if (err.status === 404) {
                res.status(404).json({message: "Not Found!"});
        } else {
                res.status(500).json({message: "Something looks wrong :("});
        }
});

app.listen(3001, function(){ 
    console.log('MAIN Server is listening on port 3001');
});

这就是我尝试使用 Insomnia请求提交表单的方式

在启动服务器/执行请求之前,您可能需要确保上传目录/home/username/projects/data/img/存在。

请注意,如果您的错误逻辑也处理了非多重错误,您将能够自己检测到这种错误,因为在这种情况下, 系统错误(NOENT)被抛出而不是多重错误:

upload(req, res, function(err) {
            if (err instanceof multer.MulterError) {
                res.json({status: "Error", error_message: "Some kind of error with multer"});
            } else if(err) {
                res.json({status: "Error", error_message: err.message});
            } else {
                res.json({status: "Success", success_message: "Image uploaded successfully."});
            }
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM