vue 移动端上传头像

头像上传主要的难点在于后端的操作。接下来我会从最开始一步步实现。

我用的是vant组件 其实感觉移动端的话vant组件还是非常好用的Vant 2 - Mobile UI Components built on Vue

这里使用的是Vant 2的Uploader 文件上传

首先在页面中使用该组件

<template>
  <div>
   <van-uploader :after-read="afterRead" />
  </div>
</template>

<script>
export default {
  methods: {
    afterRead(file) {
      // 此时可以自行将文件上传至服务器
      console.log(file);
    },
  },
};
</script>

<style lang="scss" scoped>

</style>

 当我们随便上传一张图片之后就会出来一个file对象

 这样就能获取到图片的一些信息 比如:图片大小 图片格式 ........

回到页面开始写发送请求 这里注意要写一个name字段

<template>
  <div>
   <van-uploader name='uploadFile' :after-read="afterRead" />
  </div>
</template>

<script>
export default {
  methods: {
    afterRead(file) {
      // 此时可以自行将文件上传至服务器
      console.log(file);
      // 创建一个新的FromData
      const fd = new FormData()
      // 这一步是把刚才获取到的图片信息 添加到fd里面
      fd.append('uploadFile',file.file)
      // 这时候就可以向后台发请求了
      // 注意要用post
      // 这里用到了axios来发请求 没有的话要下载 npm install axios
      // 可以在根目录下 package.json中查看
      this.axios.post('http://localhost:3000/upload',fd).then(res=>{
        console.log(res);
      })
    },
  },
};
</script>

<style lang="scss" scoped>

</style>

 注意发送请求的路径,这个路径是直接向后台服务器发送的请求。到了这个时候前台代码基本完成了

开始后端代码 

​​​​​​// 配置multer中间件
const multer = require('multer');
obj = multer.diskStorage({
  //设置上传后文件路径,upload文件夹会自动创建
  destination: function (req, file, cb) {
    //指定目录
    //cb ---> callback
    cb(null, 'upload');
  }, 
   //给上传文件重命名
  filename: function (req, file, cb) {
    // 指定文件名
    let name = file.originalname;
    // name:  abcd.jpg    xxxdfdd.zip
    let ext = name.substr(name.lastIndexOf('.'));
    cb(null, uuid.v4() + ext);
  },
});
const uploadTools = multer({
  storage: obj,
});
const uuid = require('uuid');
// 静态资源托管目录
poetry.use(express.static('upload'));

 注意这里使用的一些中间件什么都需要下载 

直接 npm install multer   npm install uuid 下载完了在你的packge.json中查看

让后重要的一步来了,我们要提前在我们的后端中增加一个文件夹用来保存上传的图片也就是你的静态资源托管目录upload

 到了这一步就开始写接口

​​poetry.post('/upload',
  uploadTools.array('uploadFile'),(req,res)=>{
    console.log(req.files);
    // 这里创建一个空数组
    let urls = []
    // 循环拿到的路径
    req.files.forEach(item=>{
      console.log(item.filename);
      urls.push('http://localhost:3000/'+item.filename)
    })
    // 把路径返回
    res.send(urls)
  }),
// 指定服务器对象监听的端口号
poetry.listen(3000, () => {
  console.log('is run....');
});

 回到前台,这样就拿到的后台返回给你的图片路径 之后就可以渲染到页面上了

​​<template>
  <div>
   <van-uploader name='uploadFile' :after-read="afterRead" />
   <img :src="`${this.img}`" style="width:100vw">
  </div>
</template>

<script>
export default {
  data() {
    return {
      img: ''
    }
  },
  methods: {
    afterRead(file) {
      // 此时可以自行将文件上传至服务器
      console.log(file);
      // 创建一个新的FromData
      const fd = new FormData()
      // 这一步是把刚才获取到的图片信息 添加到fd里面
      fd.append('uploadFile',file.file)
      // 这时候就可以向后台发请求了
      // 注意要用post
      // 这里用到了axios来发请求 没有的话要下载 npm install axios
      // 可以在根目录下 package.json中查看
      this.axios.post('http://localhost:3000/upload',fd).then(res=>{
        console.log(res);
        this.img = res.data[0]
      })
    },
  },
};
</script>

<style lang="scss" scoped>

</style>

 

 

 这样图片上传就完成了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue Vant-UI是Vue.js的一个移动UI组件库,是一个轻量级的、高效的组件库,非常适合用于移动开发。其中,Van-Uploader是Vant-UI的上文件组件,允许用户将文件上到服务器或第三方存储库。 在实现头像图片上时,我们可以采用如下步骤: 1. 首先需要安装Vant-UI组件库。可以通过npm命令进行安装,输入如下代码:npm install vant --save 2. 在Vue项目中引入Vant-UI组件库。在main.js文件中写入如下代码:import Vant from 'vant' import 'vant/lib/vant-css/index.css' Vue.use(Vant) 3. 在需要使用上头像的组件中引入Van-Uploader组件,并编写如下代码: <template> <van-uploader :show-upload="false" :before-read="beforeRead" :after-read="afterRead" > <van-icon name="photograph" /> </van-uploader> </template> <script> export default { data() { return { file: '' } }, methods: { beforeRead(file) { if (file.type !== 'image/jpeg' && file.type !== 'image/png') { this.$toast('请上 JPG/PNG 格式的图片'); return false; } if (file.size > 500 * 1024) { this.$toast('图片大小不能超过 500KB'); return false; } }, afterRead(file) { this.file = URL.createObjectURL(file.file); } } } </script> 4. 上面的代码中,我们主要使用了Van-Uploader组件的before-read和after-read两个事件回调函数。before-read为上文件之前的校验函数,例如判断文件类型和文件大小是否符合要求,这里我们限制了文件类型为JPG/PNG并且大小不能超过500KB。after-read则表示读取文件后的回调函数,我们将上的文件读取为本地链接并保存到file属性中,以便进行后续处理。 5. 最后,将file属性递给后进行处理,例如将该链接保存到服务器或者上到第三方存储库中。 总之,使用Van-Uploader组件可以轻松实现头像图片上功能,同时也可以根据需求进行个性化的定制和扩展,是一个非常实用且易于使用的组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值