>  기사  >  웹 프론트엔드  >  Node는 단순히 아바타 기능을 변경하는 코드 공유를 구현합니다.

Node는 단순히 아바타 기능을 변경하는 코드 공유를 구현합니다.

小云云
小云云원래의
2017-12-29 14:16:062114검색

更换头像的功能我们再熟悉不过了,本文主要介绍了node简单实现一个更改头像功能的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

思路

首先,当用户点击上传头像,更新头像的时候,将头像上传到项目的一个文件夹里面(我是存放在项目的public/images/img里面),并且将图像名重命名(可以以时间戳来命名)。

同时图片在项目的路径插入到用户表的当前用户的 userpicturepath 里面

然后更新用户的 session,将图片里面的路径赋值给 session 的里面的picture属性里面

a1f02c36ba31691bcfe87b2722de723b 的 src 获取到当前用户的session里面的 picture 的值,最后动态刷新页面头像就换成了用户上传的头像了

实现效果

代码

ejs部分


<img class="nav-user-photo" src="<%= user.picture.replace(/public(\/.*)/, "$1") %>" alt="Photo" style="height: 40px;"/>
<form enctype="multipart/form-data" method="post" name="fileInfo">
  <input type="file" accept="image/png,image/jpg" id="picUpload" name="file">
</form>
<button type="button" class="btn btn-primary" id="modifyPicV">确定</button>

js部分


document.querySelector(&#39;#modifyPicV&#39;).addEventListener(&#39;click&#39;, function () {
  let formData = new FormData();
  formData.append("file",$("input[name=&#39;file&#39;]")[0].files[0]);//把文件对象插到formData对象上
  console.log(formData.get(&#39;file&#39;));
  $.ajax({
    url:&#39;/modifyPic&#39;,
    type:&#39;post&#39;,
    data: formData,
    processData: false, // 不处理数据
    contentType: false,  // 不设置内容类型
    success:function () {
      alert(&#39;success&#39;);
      location.reload();
    },
  })
});

路由部分,使用formidable,这是一个Node.js模块,用于解析表单数据,尤其是文件上传


let express = require(&#39;express&#39;);
let router = express.Router();
let fs = require(&#39;fs&#39;);
let {User} = require(&#39;../data/db&#39;);
let formidable = require(&#39;formidable&#39;);
let cacheFolder = &#39;public/images/&#39;;//放置路径
router.post(&#39;/modifyPic&#39;, function (req, res, next) {
  let userDirPath = cacheFolder + "Img";
  if (!fs.existsSync(userDirPath)) {
    fs.mkdirSync(userDirPath);//创建目录
  }
  let form = new formidable.IncomingForm(); //创建上传表单
  form.encoding = &#39;utf-8&#39;; //设置编码
  form.uploadDir = userDirPath; //设置上传目录
  form.keepExtensions = true; //保留后缀
  form.maxFieldsSize = 2 * 1024 * 1024; //文件大小
  form.type = true;
  form.parse(req, function (err, fields, files) {
    if (err) {
      return res.json(err);
    }
    let extName = &#39;&#39;; //后缀名
    switch (files.file.type) {
      case &#39;image/pjpeg&#39;:
        extName = &#39;jpg&#39;;
        break;
      case &#39;image/jpeg&#39;:
        extName = &#39;jpg&#39;;
        break;
      case &#39;image/png&#39;:
        extName = &#39;png&#39;;
        break;
      case &#39;image/x-png&#39;:
        extName = &#39;png&#39;;
        break;
    }
    if (extName.length === 0) {
      return res.json({
        msg: &#39;只支持png和jpg格式图片&#39;
      });
    } else {
      let avatarName = &#39;/&#39; + Date.now() + &#39;.&#39; + extName;
      let newPath = form.uploadDir + avatarName;
      fs.renameSync(files.file.path, newPath); //重命名
      console.log(newPath)
      //更新表
      User.update({
        picture: newPath
      }, {
        where: {
          username: req.session.user.username
        }
      }).then(function (data) {
        if (data[0] !== undefined) {
          User.findAll({
            where: {
              username: req.session.user.username
            }
          }).then(function (data) {
            if (data[0] !== undefined) {
              req.session.user.picture = data[0].dataValues.picture;
              res.send(true);
            } else {
              res.send(false);
            }
          })
        }
      }).catch(function (err) {
        console.log(err);
      });
    }
  });
});

相关头像:

关于js拖拽上传 [一个拖拽上传修改头像的流程]

thinkphp批改头像

关于js拖拽上传 [一个拖拽上传修改头像的流程]_javascript技巧

위 내용은 Node는 단순히 아바타 기능을 변경하는 코드 공유를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.