【问题标题】:When I upload image through multer , I got image undefined error当我通过 multer 上传图像时,出现图像未定义错误
【发布时间】:2019-03-31 00:07:06
【问题描述】:

我将它与 node 和 mysql 一起使用,角度为 5

        const express = require('express');
        const mysql = require('mysql');
        const bodyParser = require('body-parser');
        const path = require('path');
        const cors = require('cors');
        const router = express.Router();
        const multer = require('multer');
        const storage = multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, './assets/images/')
        },
        filename: function (req, file, cb) {
            cb(null, file.originalname)
        }
        });
        const fileFilter = (req, file, cb)=>{
        if(file.mimetype === 'image/jpeg' || file.mimetype === 'image/png'){
            cb(null, true);
        }
        else{
            cb(null, false);
        }
        };
        upload = multer({
        storage: storage,
        limits:{
            filesize : 1024 * 1024 * 5
        },
        fileFilter : fileFilter
        });

        const app = express();

        //DATABASE CONNECTION
        const connection = mysql.createConnection({
        host: 'localhost',
        user:'root',
        password: 'root',
        database: 'inpblog',
        port: 8889
        });

        // ALLOW CROSS ORIGIN
        const corsOptions = {
        origin: 'http://localhost:4200',
        origin1: 'http://localhost:4202',
        optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
        };
        app.use(cors(corsOptions));
        app.use('./assets/images', express.static(path.join(__dirname, 'dist', 'upload')));

        const jsonParser = bodyParser.json();
        const urlencodedParser = bodyParser.urlencoded({ extended: false });


        connection.connect(function(error){
        if(!!error){
            console.log("error - db not connected");
        }
        else{
            console.log("connected");
        }
        });

在这里我定义了在 mysql 数据库中上传图像的代码。通过邮递员使用multer中间件在目标文件夹中上传图像但是当我通过ng表单上传图像时,它在控制台中显示错误。“图像未定义”并在mysql中提交“c:/fakepath/image.jgg”。

这是插入帖子的 API

        app.post('/insertPost', upload.single('txt_blog_image'), jsonParser, (req, res) => {
        console.log("image: ", req.file); // working fine only with postman
        //console.log("rBody: ", req.body.txt_blog_image); // working fine only with Angular
        let blogFields = {
            post_author : req.body.txt_blog_author,
            post_image : req.body.txt_blog_image
        };
        let sql = 'INSERT INTO insdb SET ?';
        let query = connection.query(sql, blogFields, (err,result)=> {
            res.send('New Post  added...');
        });
        });

        // Get All Post
        app.get('/getallposts', (req, res) => {
        let sql = 'SELECT * FROM insdb';
        let query = connection.query(sql, (err, results) => {
            if(err) throw err;
            console.log(results);
            res.send(results);
        });
        });

        app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname, 'dist/index.html'));
        });

        app.listen(4202);

【问题讨论】:

    标签: mysql node.js angular multer


    【解决方案1】:

    试试这个方法。

    var path = require('path');
    var multer = require('multer');
    
    var storage = multer.diskStorage({
       destination: function(req, file, callback) {
        callback(null, './assets/images/')
       },
       filename: function(req, file, callback) {
        console.log(file)
        callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
       }
    })
    

    在你的 api 中:

    app.post('/getallposts',upload.single("image") , function(req, res) {
       let sql = 'SELECT * FROM insdb';
        let query = connection.query(sql, (err, results) => {
            if(err) throw err;
            console.log(results);
            res.send(results);
        });
    })
    

    Angular 方面:

    let form = new FormData();
    form.append('image' , file); 
    

    然后console在服务器端,req.files检查文件是否来了?

    有关更多信息和示例,请参阅link

    【讨论】:

    • 我尝试通过邮递员及其工作文件提交,但使用 Angular 5 显示未定义。
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2021-05-03
    • 1970-01-01
    • 2020-07-19
    • 2021-05-02
    • 1970-01-01
    • 2021-05-01
    • 2016-07-04
    相关资源
    最近更新 更多