20.multer上传图片

说明

1.后台安装 multer模块,同时引入fs模块

2.router.js入口文件导入模块

复制代码
const fs=require('fs')
const multer=require('multer')

3.创建uploads文件夹存储图片

4.配置静态资源

实现代码

复制代码
const express = require('express')
const router = express.Router() //创建router
const multer = require('multer') // 上传图片依赖
const fs = require('fs') //安装文件模块
const path = require('path') //安装路径模块
/*
上传图片
说明:
1.后台安装 multer模块,同时引入fs模块
2.router.js入口文件导入模块
const fs=require('fs')
const multer=require('multer')
3.上传图片
*/



// /1.配置项
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        // 调用 cb 即可实现上传位置的配置:注意直接从二级目录开始写
        cb(null, 'public/uploads')
    },
    filename: function (req, file, cb) {
        // 指定文件名
        //文件名重复覆盖
        // 后缀名发生改变,如何解决?👇
        console.log('----', file)
        let exts = file.originalname.split('.') //拿到源文件的后缀名
        let ext = exts[exts.length - 1]

        let tmpname = (new Date()).getTime() + parseInt(Math.random() * 9999) //为了避免重复,用时间戳表示
        cb(null, `${tmpname}.${ext}`);
    }
});

//2 创建文件夹

var createFolder = function(folder){

    try{

        // 测试 path 指定的文件或目录的用户权限,我们用来检测文件是否存在

        // 如果文件路径不存在将会抛出错误"no such file or directory"

        fs.accessSync(folder); 

    }catch(e){

        // 文件夹不存在,以同步的方式创建文件目录。

        fs.mkdirSync(folder);

    }  

};


var uploadFolder = './public/uploads';

createFolder(uploadFolder);


//3.将配置保存到multer
var upload = multer({
    storage: storage
});

//4.路由 。上传图片必须用post方法
router.post('/api/uploadImg', upload.single('file'), (req, res) => { ////hehe就是上传图片数据的key值,与前端的input['file']的name属性必须保持统一。可以用postman模拟,数据类型是表单对象。
    console.log(req.file)
    let {
        size,
        mimetype,
        path
    } = req.file
    let types = ['jpg', 'jpeg', 'png', 'gif'] //允许上传的数据类型
    let tmpType = mimetype.split('/')[1]
    if (size > 500000) {
        return res.send({
            err: -1,
            msg: '尺寸过大'
        })
    } else if (types.indexOf(tmpType) == -1) {
        return res.send({
            err: -2,
            msg: '媒体类型错误'
        })
    } else {
        let url = `/public/uploads/${req.file.filename}`
        res.send({
            err: 0,
            msg: 'ok',
            img: url,
            name: file.originalname
        })
    }


})
module.exports = router

posted @   禾耳  阅读(117)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示