1.封装mkdirs模块判断文件夹是否已经存在,不存在就创建
const fs = require('fs');
const path = require('path');
exports.mkdirs = (pathname, callback) => {
pathname = path.isAbsolute(pathname) ? pathname : path.join(__dirname, pathname);
pathname = path.relative(__dirname, pathname);
const floders = pathname.split(path.sep);
floders.forEach(floder => {
const _stat = fs.statSync(path.join(__dirname, pre, floder));
const hasMkdir = _stat && _stat.isDirectory();
fs.mkdirSync(path.join(__dirname, pre, floder));
callback && callback(null);
callback && callback(error);
pre = path.join(pre, floder);
2.头像上传对应的路由处理函数
const db = require('../db/index')
const fs = require('fs');
const path = require('path');
const mkdir = require('../tools/mkdir')
exports.updateAvatar = (req, res) => {
const base64 = req.body.avatar.replace(/^data:image\/\w+;base64,/, "");
const dataBuffer = new Buffer.from(base64, 'base64')
mkdir.mkdirs(path.join(__dirname, `../img/${user.username}`), err => {
const avatarPath = path.join(__dirname, `../img/${user.username}/avatar.png`)
fs.writeFile(avatarPath, dataBuffer, function (err) {
const avatarUrl = `/img/${user.username}/avatar.png`
const sql = 'update bg_users set user_pic=? where id=?'
db.query(sql, [avatarUrl, req.user.id], (err, results) => {
if (err) return res.error(err)
if (results.affectedRows !== 1) return res.error('更新头像失败!')
return res.success(0, '更新头像成功!', null)