Nodejs 基于 express + multer 的文件上传

在实际的生产中我们经常需要上传头像等文件的操作,这时候我们可以选择使用 multer 这个中间件来解决这个问题,下面用上传头像的常见业务来解释 multer 中间件的用法。

效果

最终的效果是我们在前端通过选择本地的一个文件,然后上传即可,在后端我们规定好的文件夹中我们就可以看到上传的图片,然后执行我们的后续操作。

image-20221009221120266

image-20221009221200578

代码部分

首先添加相关的库:

pnpm add express multer

前端代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>demo about multer</title>
    </head>
    <body>
        <form action="http://localhost:9009/addImg" method="post" enctype="multipart/form-data">
            <input type="file" name="files" /> <br />
            <input type="submit" value="上传" />
        </form>
    </body>
</html>

后端代码:

app.js

const express = require('express')
const multer = require('multer')
const upload = multer({
    dest: './uploads',
})
const app = express()
const handler = require('./handler')

app.use('/', upload.single('files'), handler)

app.listen(9009, () => {
    console.log('后端运行在 9009 端口')
})

handler.js

const express = require('express')
const router = express.Router()
const fs = require('fs')

router.post('/addImg', function (req, res) {
    const oldFile = `${req.file.destination}/${req.file.filename}` //指定旧文件
    const newFile = `${req.file.destination}/${req.file.originalname}` //指定新文件
    console.log(req.file)
    fs.rename(oldFile, newFile, function (err) {
        if (err) {
            res.send({
                msg1: '上传失败!',
                msg2: err.message,
            })
        } else {
            res.send('上传成功!')
        }
    })
})

module.exports = router

完整的代码

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南顾北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值