当我上传图片通过multer,我得到了图片未定义的错误

jgovgodb  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(274)

我在node中使用它,在angular5中使用mysql。

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数据库中上传图像的代码。通过postman它用multer中间件在目的文件夹上传一个图片,但是当我通过ng表单上传一个图片时,它在控制台显示错误。“image undefined”并在mysql中提交“c:/fakepath/image.jgg”。
下面是插入post的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);
fwzugrvs

fwzugrvs1#

这样试试。

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 查文件来不来?
有关更多信息和示例,请参见此链接

相关问题