1、安装multer express
npm i express multer
2、搭建本地服务器
const express = require('express')
const app = express()
const user = require('./interface/user')
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.all('*', function (req, res, next) {
// 设置请求头为允许跨域
res.header('Access-Control-Allow-Origin', '*');
// 设置服务器支持的所有头信息字段
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild, sessionToken');
// 设置服务器支持的所有跨域请求的方法
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
next();
});
// 静态文件夹
app.use('/upload',express.static(__dirname+'/upload'));
app.use('/system',user)
app.listen('1024',()=>{
console.log('服务启动成功! http://127.0.0.1:1024');
})
3、新建 路由文件user.js
const express = require('express')
const multer = require('multer')
const fs = require('fs')
const path = require('path')
const { errorResponse, successResponse } = require('../until/response')
const router = express.Router()
let fileName = ''
const upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
// 上传文件得保存文件夹
cb(null, './upload')
},
filename: function (req, file, cb) {
// fieldname是表单的name值,也就是我们设定的“logo”,
// originalname是文件上传时的名字,可以根据它获取后缀,
// encoding,mimetype 我就不详细介绍了,可以自行输出查看。
const { fieldname, originalname, encoding, mimetype } = file
const after = originalname.split('.')[1] ? '.' + originalname.split('.')[1] : '.jpg'
fileName = fieldname + after
cb(null, fieldname + after);
}
})
})
router.post('/user/avatar', upload.single('flower'), (req, res) => {
// 读取文件 转成二进制流
fs.readFile(path.resolve(__dirname,"../upload/"+fileName),'binary',(err,data)=>{
//将二进制流转成base64 编码
let b64 = Buffer.from(data).toString('base64')
let params = {
... req.file,
base64:b64,
// 前台访问得路径上传文件路径 一点要在第二步配置静态问价夹 否则访问不到
imgUrl:'/upload/'+fileName
}
res.json(
successResponse(200, '上传成功',params)
)
})
})
module.exports = router
4、最终效果