当前位置: 首页 > news >正文

vue 前端上传图片组件

<template>
  <div class="update">
    <!-- 通过input获取文件 ,为了美观使用v-show="false" 将input隐藏 通过input的change事件绑定fileChange-->
    <input type="file" v-show="false" accept="image" ref="input" @change="fileChange($event.target.files)">
    <!-- 通过$refs操作input的点击事件,调起文件选择 -->
    <div @click="$refs.input.click()">
      <!-- 通过slot内容分发将头像的显示交给父组件,父组件可以自定义图片样式 -->
      <slot></slot>
    </div>
  </div>
</template>
<script>
/*
  auth:袁
  作用:文件上传
  返回事件: file
  返回事件参数: file对象
*/
export default {
  methods: {
    fileChange(files) {
    /* 通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。
    它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单
    的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式
    和表单通过submit() 方法传输的数据格式相同*/
    // 你可以自己创建一个FormData对象,然后通过调用它的append()方法添加字段,就像这样:
    let formData = new FormData();
    formData.append('thumb', files[0]);
    //由于我的请求接口需要openid所以需要再次向FormData对象添加openid字段,如果你们不需要可以不用此操作
    formData.append('openid', localStorage.getItem('openid'));
    // 向父组件传递参数,事件为fileChange,参数为formData对象
    this.$emit('fileChange', formData)
    },
  }
}

</script>
组件使用
1.导入注册
import Update from '@/components/update'
  在 对象局部注册该组件 components: {
  Update,

  },
2.页面使用
< !--父组件通过fileChange事件用于接收子组件的派发事件 -->
  <Update @fileChange="fileChange" >
<!--这里是slot自定义内容 -->
  <img :src="img" alt="" class="info">
</Update>
3.事件处理
fileChange(file) {
  // 因为file是个FormData格式的对象所以可以直接通过接口开始上传,不需要做多余操作
  this.axios.post('/upload/thumb', file).then(res => {
  console.log(res.data.datas)
  this.img = this.HTTP + res.data.datas
  }, err => {
  console.log(err)
  })
},


转载于:https://www.cnblogs.com/yuanchenchun/p/8377317.html

相关文章:

  • vuex 笔记整理
  • javascript 总结(常用工具类的封装)
  • 深入浅出webpack学习(1)--核心概念
  • Js基础知识(一) - 变量
  • Linux常用命令大全 (非常有用)
  • 配置karma支持Chrome浏览器
  • Java程序员升职加薪必备技术——分布式
  • unity探索者之微信登录,非第三方插件
  • json 解析豆瓣ApiURL
  • mongodb数据备份脚本和日志切割脚本
  • 资讯丨Linux基金会一行到访腾讯参观交流
  • 《设计模式之禅》--代理扩展:动态代理
  • IOLI-crackme0x01-0x05 writeup
  • 思考|自动化测试面试题第一波
  • 算法学习之路|欧拉回路初见
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 2017年终总结、随想
  • Angular 响应式表单之下拉框
  • canvas 绘制双线技巧
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java|序列化异常StreamCorruptedException的解决方法
  • java小心机(3)| 浅析finalize()
  • Median of Two Sorted Arrays
  • nodejs:开发并发布一个nodejs包
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • TCP拥塞控制
  • 对象管理器(defineProperty)学习笔记
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 力扣(LeetCode)21
  • 使用putty远程连接linux
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 问题之ssh中Host key verification failed的解决
  • Hibernate主键生成策略及选择
  • scrapy中间件源码分析及常用中间件大全
  • 从如何停掉 Promise 链说起
  • 函数计算新功能-----支持C#函数
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #{}和${}的区别是什么 -- java面试
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (力扣)循环队列的实现与详解(C语言)
  • (三)docker:Dockerfile构建容器运行jar包
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转) ns2/nam与nam实现相关的文件
  • (转)Google的Objective-C编码规范
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core Swagger 过滤部分Api