vue--上传图片

本文介绍了在Vue.js中实现图片上传的步骤,包括定义变量、创建上传文件的input元素、监听事件并读取文件,以及在组件销毁时的清理工作。提供了一段完整的代码示例,并展示了最终效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

样式:

先定义变量,且给图片src给个空值

然后写方法:

创建元素input,追加type=file,并且在事件被侦听时上传文件

给上传的图片加判断事件,并且创建读取对象,发起异步请求去读取文件

然后在组件销毁之前移除事件:

 完整代码如下:


<template>
  <div class="alert-box-item">
    <div class="bigImg-div" @click="toGetImg">
      <img class="bigImg" :src="valueUrl" v-if="valueUrl" />
    </div>
  </div>
</template>

<script>
let inputElement = null;
export default {
  data() {
    return {
      valueUrl: "",
    };
  },
  methods: {
    toGetImg() {
      if (inputElement === null) {
        // 生成上传的控件
        inputElement = document.createElement("input");
        inputElement.setAttribute("type", "file");
        inputElement.style.display = "none";

        if (window.addEventListener) {
          inputElement.addEventListener("change", this.uploadFile, false);
        } else {
          inputElement.addEventListener("change", this.uploadFile);
        }
        document.body.appendChild(inputElement);
      }
      inputElement.click();
    },
    uploadFile(el) {
      console.log(el);
      if (el && el.target && el.target.files && el.target.files.length > 0) {
        const files = el.target.files[0];
        const size = files.size / 1024 / 1024;
        const isLt2M = files.size / 1024 / 1024 < 2;
        // 判断上传文件大小
        if (!isLt2M) {
          this.$message.error("上传头像图片大小不能超过 2MB!");
        } else if (files.type.indexOf("image") === -1) {
          //如果不是图片格式
          this.$message.error("请选择图片文件");
        } else {
          const its = this;
          const reader = new FileReader(); //创建读取文件对象
          reader.readAsDataURL(el.target.files[0]); //发起异步请求,读取文件
          reader.onload = function () {
            its.valueUrl = this.result;
            console.log(its.valueUrl);
          };
        }
      }
    },
  },
  beforeDestroy() {
    if (inputElement) {
      if (window.addEventListener) {
        inputElement.removeEventLister("change", this.onGetLocalFile, false);
      } else {
        inputElement.detachEvent("change", this.onGetLocalFile);
      }
      document.body.removeChild(inputElement);
      inputElement = null;
    }
  },
};
</script>

<style>
.alert-box-item {
  overflow: hidden;
}

.bigImg-div {
  width: 200px;
  height: 200px;
  border-radius: 100%;
  overflow: hidden;
  border: 1px solid #ddd;
  cursor: pointer;
}

.bigImg {
  display: block;
  width: 200px;
  height: 200px;
  border-radius: 100%;
}
</style>

效果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值