Express文件上传

路由拦截

var express = require('express');
var router = express.Router();
var user = require('../controllers/userController')
// 文件上传-中间件multer
let multer = require('multer')
// 设置文件上传后的保存地址
let upload = multer({ dest: './public/images/' })

// 单文件上传
router.post('/uploadUserHeadImg', upload.single('file'), user.uploadUserHeadImg);
// 多文件上传
router.post('/uploadImgs', upload.array('files', 5), user.uploadImgs);
 
module.exports = router;

处理函数
其实在进入该业务逻辑处理函数之前,也就是路由拦截部分,文件已经上传成功,此处的作用就是处理业务上的逻辑了,比如数据库操作等

var dbConfig = require('../util/dbConfig')

// 文件上传
let fs = require('fs') // 引入文件处理对象
const uploadUserHeadImg = (req, res) => {
    if (!req.file) {
        res.send({
            code: 400,
            msg: '上传文件不能为空'
        })
    } else {
        let file = req.file
        // 修改文件名字
        fs.renameSync('./public/images/' + file.filename, './public/images/' + file.originalname)
        // 设置响应类型以及编码
        res.set({
            'cpntent-type': 'application/json; charset=utf-8'
        })
        let { id } = req.query
        let imageUrl = 'http://localhost:3006/images/' + file.originalname
        let sql = 'update user set pic=? where id=?'
        let sqlArr = [imageUrl, id]
        let callBack = (err, data) => {
            if (err) {
                res.send({
                    code: 400,
                    msg: '上传成功,插入失败'
                })
            } else {
                if (data.affectedRows === 1) {
                    res.send({
                        code: 200,
                        msg: '上传成功',
                        filePath: imageUrl
                    })
                } else {
                    res.send({
                        code: 400,
                        msg: '数据库插入失败'
                    })
                }
            }
        }
        dbConfig.sqlConnect(sql, sqlArr, callBack)
    }
}
// 多文件上传
const uploadImgs = (req, res) => {
    let files = req.files
    if (!files.length) {
        res.send({
            code: 400,
            msg: '上传文件不能为空'
        })
    } else {
        for (let file of files) {
            // 设置响应类型以及编码
            res.set({
                'cpntent-type': 'application/json; charset=utf-8'
            })
            // 修改文件名字
            fs.renameSync('./public/images/' + file.filename, './public/images/' + file.originalname)
            let imageUrl = 'http://localhost:3006/images/' + file.originalname
            let sql = 'insert into attach_file (img_path, create_at) values (?,?)'
            let sqlArr = [imageUrl, new Date()]
            let callBack = (err, data) => {
                if (err) {
                    res.send({
                        code: 400,
                        msg: '上传成功,插入失败'
                    })
                } else {
                    if (data.affectedRows === 1) {
                        res.send({
                            code: 200,
                            msg: '上传成功',
                            filePath: imageUrl
                        })
                    } else {
                        res.send({
                            code: 400,
                            msg: '数据库插入失败'
                        })
                    }
                }
            }
            dbConfig.sqlConnect(sql, sqlArr, callBack)
        }
    }
}

module.exports = {
    uploadUserHeadImg,
    uploadImgs
}
posted @ 2021-11-18 16:03  木-鱼  阅读(794)  评论(0编辑  收藏  举报