vue2实现上传头像以及后端的node接收

大家在写项目的时候有可能会遇到上传头像的需求,今天我也是琢磨了一天,给大家分享一下,比较详细的说一下具体的操作流程,这里我后端用到的是node,当然,所有的后端存储图片其实都是一样的,相信大家看完后都能够熟悉操作一遍上传以及保存数据库和前端页面的展示全流程

         好了,先看一下我们要实现的需求,其实很简单,就是用户点击他要上传的头像,然后点更换头像,页面就能更换成用户所上传的头像,要实现这个功能,大家得先熟悉vue的基本语法以及element-ui的基本引入,这个大家可以去搜教程,基本上很多,就不细说了。先看一下最终的效果图

 

         图中的两个地方就是更换头像的情况,所实现的就是点击提交就能出现如图上面的效果就说明更换头像是成功的。

        下面就来实现这个功能 

前端上传头像的样式相关直接用element-ui所提供的就可以了,大家粘贴过去就可以了,根据官方文档自行更改自己喜欢的样式就可以了

<el-upload
  class="avatar-uploader"
  action="https://jsonplaceholder.typicode.com/posts/"
  :show-file-list="false"
  :on-success="handleAvatarSuccess"
  :before-upload="beforeAvatarUpload">
  <img v-if="imageUrl" :src="imageUrl" class="avatar">
  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

<style>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>

<script>
  export default {
    data() {
      return {
        imageUrl: ''
      };
    },
    methods: {
      handleAvatarSuccess(res, file) {
        this.imageUrl = URL.createObjectURL(file.raw);
      },
      beforeAvatarUpload(file) {
        const isJPG = file.type === 'image/jpeg';
        const isLt2M = file.size / 1024 / 1024 < 2;

        if (!isJPG) {
          this.$message.error('上传头像图片只能是 JPG 格式!');
        }
        if (!isLt2M) {
          this.$message.error('上传头像图片大小不能超过 2MB!');
        }
        return isJPG && isLt2M;
      }
    }
  }
</script>

         有了上传功能的样式,前端基本上就完活了,elementui已经写好了请求地址,大家不需要写axios请求。接下来就是后端的接收操作。

好了,后端这边需要两个包,分别是:

npm i multer fs    //大家复制去安装下两个包即可

安装完成后,写入的代码如下:

const multer = require("multer");
const fs = require("fs");
//头像更换接口
app.post('/imgload',multer({
    //接收图片所存在当前目录下的public/images文件夹下
    dest:'public/images',
}).array('file',1),function(req,res,next){
    let files = req.files;
    let file = files[0];
    let fileInfo = {};
    let path = 'public/images/'+Date.now().toString()+"_"+file.originalname;
    fs.renameSync('./public/images/'+file.filename,path)
    //获取文件的基本信息
    fileInfo.type = file.mimetype;
    fileInfo.name = file.originalname;
    fileInfo.size = file.size;
    //所存放的路径,这个很重要
    fileInfo.path = path;
    // console.log(fileInfo.path);
    res.send({
        code: 200,
        msg: "OK",
        data: fileInfo,
    });
});

 根据上面的操作,大家前端上传的图片,后端就能接收到了,并存放在了本地的文件夹下面,下面继续存入数据库,当然数据库里面是不能放图片的,所以得存放这张图的地址。

npm i mysql //大家安装mysql的包,方便我们操作数据库

然后去请求一个路由,去把地址存放在数据库内即可

app.get('/imgurl',(request,response)=>{
    // console.log(request.query);
    let Sqlimgurl = `UPDATE reg SET imgurl = '${request.query.imgimgimg}' WHERE urename = ${request.query.username}`
    let Sqlrankimgurl = `UPDATE rankinglist SET imgurl = '${request.query.imgimgimg}' WHERE username = ${request.query.username}`
    con.query(Sqlimgurl);
    con.query(Sqlrankimgurl);
    response.send(request.query.imgimgimg)
});

 这样就存好了我们需要的地址

大家按照上述的操作一遍应该也能达到效果 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,前端需要安装 axios 库,用于发送 HTTP 请求。接下来,可以通过以下步骤实现 Vue2.js 项目连接后端实现登录: 1. 在 Vue2.js 项目中创建一个登录页面,包括用户名和密码输入框以及登录按钮。 2. 在登录页面中,当用户点击登录按钮时,通过 axios 发送 HTTP POST 请求到后端登录接口,携带用户名和密码等登录信息。 3. 后端接口收到请求后,对用户的登录信息进行验证,如果验证通过,则返回一个包含用户信息的 JSON 对象,否则返回错误信息。 4. 前端接收后端返回的 JSON 对象后,可以将用户信息存储在本地,如将用户信息保存在 Vuex 中。 5. 在登录成功后,跳转到其他需要登录才能访问的页面时,可以在路由守卫中验证用户是否已登录,如果已登录则放行,否则跳转到登录页面。 下面是一个示例代码,用于实现 Vue2.js 项目连接后端实现登录: ```html <template> <div> <input type="text" v-model="username" placeholder="用户名"> <input type="password" v-model="password" placeholder="密码"> <button @click="login">登录</button> </div> </template> <script> import axios from 'axios'; export default { data() { return { username: '', password: '', }; }, methods: { async login() { try { const response = await axios.post('/api/login', { username: this.username, password: this.password, }); const user = response.data.user; // 将用户信息保存在 Vuex 中 this.$store.commit('setUser', user); // 跳转到其他需要登录才能访问的页面 this.$router.push('/dashboard'); } catch (error) { console.error(error); alert('登录失败,请检查用户名和密码'); } }, }, }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只爱web的羊驼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值