原理:dispatchEvent 自定义触发事件,常用于自定义鼠标事件或点击事件 ,原生控件input打开上传文件
方案:vue项目,点击自己的上传文件图标,通过dispatchEvent主动触发一个自定义上传文件事件 .

  • 原生控件 input 

accept 属性: 
accept = "audio/* " :接受所有的声音文件
accept = "video/* " :接受所有的视频文件

accept = "image/* " :接受所有的图像文件。

如需规定多个值,请使用逗号分隔(比如 <input accept="audio/*,video/*,image/*" />)。

<input
type="file"
accept="image/*" // 可以打开相机或文件,"jpg,png,gif"这种打开只能上传特定文件且没有相机
@change="changeImage()"
ref="avatarInput"
style="display:none"
>
  • 隐藏原生上传控件,使用自己上传的图标实现上传功能
  • <template>
    <section>
    <!-- 自定义上传按钮 -->
    <div class="list-items">
    <span>活动主K</span>
    <div class="images" @click="uploadImg(1)">
    <img :src="require('./images/upload@2x.png')" alt="" />
    </div>
    </div>
    <!-- 原生控件 -->
    <input class="uploadfile" type="file" @change="fileImage" ref="filElem" style="display: none" accept="image/*" />
    </section>
    </template>
    <script>
    export default {
    methods: {
    // 上传图片
    uploadImg() {
    if (this.$store.state.isInApp) {
    console.log('isInApp');
    } else {
    // 触发一个自定义事件
    this.$refs.filElem.dispatchEvent(new MouseEvent("click"));
    }
    },
    fileImage(e) {
    let that = this;
    let file = e.target.files[0];
    this.file = file;
    // 校验图片格式
    var rFilter = /^(image\/jpeg|image\/jpg|image\/png|image\/gif)$/i; // 检查图片格式
    if (!rFilter.test(file.type)) {
    $utilMsg.warn("不支持的格式,请重新上传!");
    return false;
    }
    // 判断图片是否大于10M
    if (file.size >= 10 * 1000 * 1024) {
    return $utilMsg.warn("上传图片过大,请重新选择");
    }
    this.upImgUrl()
    },
    upImgUrl() {
    let params = new FormData();
    params.append("file[]", this.file);
    let that = this
    return window.$.ajax({
    type: "POST",
    url: xxxxx,
    data: params,
    contentType: false,
    processData: false,
    mimeType: "multipart/form-data",
    success: function (data) {
    data = JSON.parse(data);
    if (+data.code === 0) {
    let imgarr = data.data
    that.picThumb = imgarr[0].showPath;
    console.log('外部图片', imgarr);
    } else {
    console.log('上传失败');
    return
    }
    },
    });
    },
    }
    }
    </script>

vue+html5实现上传图片的更多相关文章

  1. vue element-ui 组件上传图片 以及对 图片的 宽高 和 大小 格式等 做出限制

    vue  文件: 自行引用 elemen-ui    <el-upload                         action=" 让后端给你上传地址 "      ...

  2. html5中上传图片

    从相册中选择图片上传 function uploadFromAlbum(type) { var dirtype = ""; if ("pick_store_license ...

  3. Html5 拖放上传图片

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  4. Vue HTML5 History 模式

    vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 his ...

  5. vue+element 递归上传图片

    直接上代码. <template>   <div>     <el-upload       action="http://localhost:3000/pic ...

  6. vue element-ui 组件上传图片 之后 对上传按钮 进行隐藏,删除之后重新显示

    注:如果在当前的 vue 文件里 写了 style 样式,得 去除 scoped [私有属性必须去除,不能保留](这个是重点,不去除不生效), template 部分 <el-upload    ...

  7. vue 引入vant 上传图片oss处理

    <van-uploader :before-read="beforeRead" v-model="product.images" max-size=&qu ...

  8. html5异步上传图片显示上传文件进度条

    <html> <head> </head> <body> <p> emo_album_id:<input type="tex ...

  9. jquery html5 file 上传图片显示图片

    jquery js 的代码:不同浏览器下的路径 //建立一個可存取到該file的url function getObjectURL(file) {     var url = null ;     i ...

  10. vue|html5 form 验证

    html:<form id="scoreForm" @submit="fsub" > <template v-for="(item, ...

随机推荐

  1. 修改数据时,一直提示"具有 XXX 的 字典管理 已存在(即数据已存在)

    原代码: class DictConfig(models.Model): """ 字典表 """ id = models.AutoField ...

  2. 学会了selenium 模拟鼠标操作,你就可以偷懒点点点了

    前言 我们在做 Web 自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息. 这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用 selenium 做 Web ...

  3. [0x12] 132.小组队列

    题意 link(more:UVA540) 简化题意:对 \(n\) 个小组排队,每个小组有至多 \(m\) 个成员(每个成员有唯一编号 \(x\)),当一个人来到队伍时,如果队中有同组成员,直接插入其 ...

  4. [R语言] ggplot2入门笔记3—通用教程如何自定义ggplot2

    通用教程简介(Introduction To ggplot2) 代码下载地址 以前,我们看到了使用ggplot2软件包制作图表的简短教程.它很快涉及制作ggplot的各个方面.现在,这是一个完整而完整 ...

  5. 如何在mac电脑上配置命令行工具

    Hi,欢迎大家在有空的时候做客[江涛学编程],这里是2023年的第7篇原创文章,今天我们来聊一聊如何在mac电脑上配置命令行工具 老规矩,拍拍手,上菜. 同学,打开你的mac电脑,按住键盘上的&quo ...

  6. Hugging Face 开源库介绍

    Hugging Face 的开源生态今年成长迅速,timm 成为新加入的成员.diffusers.evaluate 以及 skops 等各种库蓬勃发展. Transformers Transforme ...

  7. 手把手教你写Dockerfile以及测试

    Dockerfile是什么? dockerfile就是用来构建docker镜像的构建文件,命令参数脚本. 如何使用Dockerfile? 1.编写一个Dockerfile文件 2.docker bui ...

  8. js节流防抖 减少服务器请求

  9. 【分析笔记】Linux gpio_wdt.c 看门狗设备驱动源码分析

    基本原理 该看门狗的设备驱动实现原理很简单,比较主要的有两点: 一.定时器喂狗 通过定时器根据配置文件配置的喂狗方式(如脉冲切换.电平切换),对指定的 gpio 进行脉冲切换或电平切换实现喂狗. 脉冲 ...

  10. 2023计算机领域顶会(A类)以及ACL 2023自然语言处理(NLP)研究子方向领域汇总

    2023年的计算语言学协会年会(ACL 2023)共包含26个领域,代表着当前前计算语言学和自然语言处理研究的不同方面.每个领域都有一组相关联的关键字来描述其潜在的子领域, 这些子领域并非排他性的,它 ...