zoukankan      html  css  js  c++  java
  • vue 图片上传功能

     

    这次做了vue页面的图片上传功能,不带裁剪功能的!

    首先是html代码,在input框上添加change事件,如下:

    1.  
      <ul class="clearfix">
    2.  
      <li v-if="imgs.length>0" v-for='(item ,index ) in imgs'>
    3.  
      <img :src="item">
    4.  
      </li>
    5.  
      <li style="position:relative" v-if="imgs.length>=6 ? false : true">
    6.  
      <img src="../../assets/img/addimg.png"><input class="upload" @change='add_img' type="file">
    7.  
      </li>
    8.  
      </ul>
    我这里做了图片数量的限制,最多6张。

    然后是data数据,如下:

    1.  
      data () {
    2.  
      return {
    3.  
      imgs: [],
    4.  
      imgData: {
    5.  
      accept: 'image/gif, image/jpeg, image/png, image/jpg',
    6.  
      }
    7.  
      }
    8.  
      }
    imgs数组是放图片路径的,页面显示图片就是循环这个数组,imgData是判断图片类型的。

    接下来是最重要的methods里面的方法,具体如下:

    [html] view plain copy
     
    1. <code class="language-html">add_img(event){    
    2.             let reader =new FileReader();  
    3.             let img1=event.target.files[0];  
    4.             let type=img1.type;//文件的类型,判断是否是图片  
    5.             let size=img1.size;//文件的大小,判断图片的大小  
    6.             if(this.imgData.accept.indexOf(type) == -1){  
    7.                 alert('请选择我们支持的图片格式!');  
    8.                 return false;  
    9.             }  
    10.             if(size>3145728){  
    11.                 alert('请选择3M以内的图片!');  
    12.                 return false;  
    13.             }  
    14.             var uri = ''  
    15.             let form = new FormData();   
    16.             form.append('file',img1,img1.name);  
    17.             this.$http.post('/file/upload',form,{  
    18.                 headers:{'Content-Type':'multipart/form-data'}  
    19.             }).then(response => {  
    20.                 console.log(response.data)  
    21.                 uri = response.data.url  
    22.                 reader.readAsDataURL(img1);  
    23.                 var that=this;  
    24.                 reader.onloadend=function(){  
    25.                     that.imgs.push(uri);  
    26.                 }  
    27.             }).catch(error => {  
    28.                 alert('上传图片出错!');  
    29.             })      
    30. },</code>  


    
    首先是获取你选择的图片,判断图片的类型和大小,然后以form表单的形式提交到后台,后台会返回给你这个图片的线上路径,你把后台返回的图片路径push到图片数组里面就可以了。
    
    

    一般情况下还有删除图片的方法,就是把图片数组里的那个路径删除掉,把数据提交到后台,告诉后台删除了哪张图片就可以了。

    <!DOCTYPE html>
    <html lang="en">

    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    body {
    margin: 0;
    }

    html,
    body {
    height: 100%;
    }

    #box {
    100%;
    height: auto;
    }

    .img-d {
    margin-top: 30px;
    300px;
    height: 300px;
    text-align: center;
    position: relative;
    }

    .img-d span {
    display: inline-block;
    100%;
    height: 100%;
    background-image: url("imagess/kmhvbjvb.jpg");
    cursor: pointer;
    background-size: 100% 100%;
    background-repeat: no-repeat;
    }

    #up {
    /* display: none; */
    }

    .rems {
    display: inline-block;
    25px;
    height: 25px;
    background: red;
    border-radius: 50% 50%;
    font-size: 17px;
    position: absolute;
    top: -6px;
    right: -6px;
    color: white;
    text-align: center;
    line-height: 25px;
    cursor: pointer;
    }
    </style>
    </head>

    <body>
    <div id="box">
    <div class="img-d">
    <span class="up-s"></span>
    <input type="file" id="up" multiple name="files">
    </div>
    </div>
    <script>
    // span的点击事件
    var addBtn = document.querySelector('.up-s');
    addBtn.addEventListener('click', function () {
    document.querySelector('#up').value = null;
    document.querySelector('#up').click();
    return false;
    }, false);

    // 处理input点击之后的change事件
    document.getElementById("up").addEventListener("change", function (e) {
    var files = this.files;
    var reader = new FileReader();
    reader.readAsDataURL(files[0]);
    reader.onload = function (e) {
    var dx = (e.total / 1024) / 1024;
    if (dx >= 2) {
    alert("文件大小大于2M");
    return;
    }
    var result = this.result;//这里就是转化之后的DataURL
    addBtn.style.backgroundImage = "url(" + result + ")";
    }
    var rem = document.createElement("i");
    rem.setAttribute("class", "rems");
    rem.innerHTML = "x";
    document.querySelector(".img-d").appendChild(rem);
    rem.addEventListener('click', function () {
    this.style.display = "none";
    addBtn.style.backgroundImage = "url(imagess/kmhvbjvb.jpg)";
    });
    })

    </script>
    </body>

    </html>

  • 相关阅读:
    [buuctf] pwn-第五空间2019pwn
    [buuctf] pwn-[OGeek2019]babyrop
    [buuctf] pwn-ciscn_2019_c_1
    [buuctf] pwn-jarvisoj_level0
    wamp集成环境配置php7.x连接mssql
    EXCEL小技巧之单击单元格实现自增
    Asuhe博客转移
    数据链路层中的最小帧长是如何计算出来的?
    CSMA/CD协议中如何确定数据重传时机?
    Cache设计
  • 原文地址:https://www.cnblogs.com/gluncle/p/9577806.html
Copyright © 2011-2022 走看看