vue项目中上传头像

一、首先考虑上传的相关需求要求

(1) 格式要求(jpg | png | jpeg | gif )
(2) 大小要求(比如不超过300kb)
(3) 尺寸大小限制(1:1,4:9,9:16)
(4) 是否可以裁剪
(5) 单张还是多张(单张一般用在用户头像)

二、具体例子来解决问题

  • 1、html部分
<template>
  <div class="hello">
    <div class="user-header">
      <input type="file" name="image" accept="image/*" @change='onchangeImgFun'
       class="header-upload-btn user-header-com">
      <img  alt="" :src='imgStr' class="user-header-img user-header-com">
      <p class="tip">图片限制50kb <span class="error">{{errorStr}}</span></p>
    </div>
  </div>
</template>


<!-- input 的accept属性可以用来解决格式筛选问题 -->

  • 2、css部分
<style scoped>
.user-header{
  position: relative;
  display: inline-block;
}
.user-header-com{
  width: 144px;
  height: 144px;
  display: inline-block;
}
.header-upload-btn{
  position: absolute;
  left: 0;
  top: 0;
  opacity: 0;
  /* 通过定位把input放在img标签上面,通过不透明度隐藏 */
}
.tip{
  font-size: 14px;
  color: #666;
}
/* error是用于错误提示 */
.error{
  font-size: 12px;
  color: tomato;
  margin-left: 10px;
}
</style>

 

  • 3、js部分
<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      imgStr: require('../assets/upload.png'),
      errorStr: ''
    }
  },
  methods: {
    onchangeImgFun (e) {
      var file = e.target.files[0]
      console.log(file)
      // 获取图片的大小,做大小限制有用
      let imgSize = file.size
      console.log(imgSize)
      var _this = this // this指向问题,所以在外面先定义
      // 比如上传头像限制5M大小,这里获取的大小单位是b
      if (imgSize <= 50 * 1024) {
        // 合格
        _this.errorStr = ''
        console.log('大小合适')
        // 开始渲染选择的图片
        // 本地路径方法 1
        // this.imgStr = window.URL.createObjectURL(e.target.files[0])
        // console.log(window.URL.createObjectURL(e.target.files[0])) // 获取当前文件的信息

        // base64方法 2
        var reader = new FileReader()
        reader.readAsDataURL(file) // 读出 base64
        reader.onloadend = function () {
          // 图片的 base64 格式, 可以直接当成 img 的 src 属性值
          var dataURL = reader.result
          console.log(dataURL)
          _this.imgStr = dataURL
          // 下面逻辑处理
        }
      } else {
        console.log('大小不合适')
        _this.errorStr = '图片大小超出范围'
      }
    }
  }

}
</script>


用户选择图片之后的渲染方法有两种

本地路径方法转化 window.URL.createObjectURL
FileReader转化为base64格式
到这里,最简单的上传头像问题就解决了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章