最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 使用原生組件上傳圖片的實(shí)例

 更新時(shí)間:2020年09月08日 15:19:29   作者:HenrikWen  
這篇文章主要介紹了vue 使用原生組件上傳圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

需求描述:需要將后臺(tái)返回的圖片路徑賦值到img的 src

1 一個(gè)頁面上傳一張圖片

當(dāng)一個(gè)頁面只有一個(gè)位置需要上傳圖片,很簡單,直接綁定上傳按鈕

html頁面

 <div class="col-md-4">
  <input class="hidden" accept="image/png,image/jpg" type="file" id="tempUploadFile" v-on:change="uploadPic($event)" />
  <input class="hidden" v-model="mapItem.MapIcon" />
  <img class="imgbgbox" v-bind:src="mapItem.MapIcon" />
 </div>

js代碼:封裝上傳圖片的方法

 uploadPic(e) {
  var _self = this;
  var inputFile = e.target;
  if (!inputFile.files || inputFile.files.length <= 0) {
   return;
  }
  var file = inputFile.files[0];
  var formData = new FormData();
  formData.append('file', file);
  formData.append('SaveDir', 'Map/MapItem');
  formData.append("FileName", $.whiskey.tools.dateFormat(new Date(), "HHmmssffff"));
  $.ajax({
   url: "/Upload/UploadPic",//后臺(tái)上傳圖片的方法
   type: 'POST',
   dateType: 'json',
   cache: false,
   data: formData,
   processData: false,
   contentType: false,
   success: function (res) {
    if (res.ResultType == 3) {
     var filePath = res.Data.file;//后臺(tái)返回的圖片路徑
     _self.mapItem.MapIcon = filePath;//將路徑賦值到聲明的變量中
    }
   }
  });
},

2 一個(gè)頁面上傳多張圖片

當(dāng)一個(gè)頁面有多個(gè)位置需要上傳圖片,如果按照上面方法,得需要綁定多個(gè)上傳函數(shù),所以我把重復(fù)的部分封裝出來,用到了promise函數(shù)

html頁面

 <div class="col-md-4">
  <input class="hidden" accept="image/png,image/jpg" type="file" id="tempUploadFile" v-on:change="uploadPic($event)" />
  <input class="hidden" v-model="mapItem.MapIcon" />
  <img class="imgbgbox" v-bind:src="mapItem.MapIcon" />
 </div>

js代碼:封裝上傳圖片的方法

 uploadPic(e) {
  var _self = this;
  var inputfile = e.target;
  _self.uploadImg(inputfile).then(data => {
   _self.mapItem.MapIcon = data;//data為取到的圖片路徑
  })
},
//封裝函數(shù)
 uploadImg(inputFile) {
  var _self = this;
  if (!inputFile.files || inputFile.files.length <= 0) {
   return;
  } 
  return new Promise((suc,err)=>{
   var file = inputFile.files[0];
   var filepath = "";
   var formData = new FormData();
   formData.append('file', file);
   formData.append('SaveDir', 'Map/MapSite');
   formData.append("FileName", $.whiskey.tools.dateFormat(new Date(), "HHmmssffff"));
   $.ajax({
    url: "/Upload/UploadPic",
    type: 'POST',
    dateType: 'json',
    cache: false,
    data: formData,
    processData: false,
    async:false,
    contentType: false,
    success: function (res) {
     if (res.ResultType == 3) {
      filepath = res.Data.file;
      suc(filepath);
     }
    }
   });
  })
 },
},

補(bǔ)充知識(shí):vue 利用原生input上傳圖片并預(yù)覽并刪除

看代碼~

<template>
 <div class="com-upload-img">
 <div class="img_group">
  <div v-if="allowAddImg" class="img_box">
  <input type="file" accept="image/*" multiple="multiple" @change="changeImg($event)">
  <div class="filter" />
  </div>
  <div v-for="(item,index) in imgArr" :key="index" class="img_box">
  <div class="img_show_box">
   <img :src="item" alt="">
   <i class="img_delete" @click="deleteImg(index)" />
   <!-- <i class="img_delete" @click="imgArr.splice(index,1)"></i> -->
  </div>
  </div>
 </div>
 </div>
</template>

js部分

<script>
export default {
 name: 'ComUpLoad',
 data() {
 return {
  imgData: '',
  imgArr: [],
  imgSrc: '',
  allowAddImg: true
 }
 },
 methods: {
 changeImg: function(e) {
  var _this = this
  var imgLimit = 1024
  var files = e.target.files
  var image = new Image()
  if (files.length > 0) {
  var dd = 0
  var timer = setInterval(function() {
   if (files.item(dd).type !== 'image/png' && files.item(dd).type !== 'image/jpeg' && files.item(dd).type !== 'image/gif') {
   return false
   }
   if (files.item(dd).size > imgLimit * 102400) {
   // to do sth
   } else {
   image.src = window.URL.createObjectURL(files.item(dd))
   image.onload = function() {
    // 默認(rèn)按比例壓縮
    var w = image.width
    var h = image.height
    var scale = w / h
    w = 200
    h = w / scale
    // 默認(rèn)圖片質(zhì)量為0.7,quality值越小,所繪制出的圖像越模糊
    var quality = 0.7
    // 生成canvas
    var canvas = document.createElement('canvas')
    var ctx = canvas.getContext('2d')
    // 創(chuàng)建屬性節(jié)點(diǎn)
    var anw = document.createAttribute('width')
    anw.nodeValue = w
    var anh = document.createAttribute('height')
    anh.nodeValue = h
    canvas.setAttributeNode(anw)
    canvas.setAttributeNode(anh)
    ctx.drawImage(image, 0, 0, w, h)
    var ext = image.src.substring(image.src.lastIndexOf('.') + 1).toLowerCase()// 圖片格式
    var base64 = canvas.toDataURL('image/' + ext, quality)
    // 回調(diào)函數(shù)返回base64的值
    if (_this.imgArr.length <= 4) {
    _this.imgArr.unshift('')
    _this.imgArr.splice(0, 1, base64)// 替換數(shù)組數(shù)據(jù)的方法,此處不能使用:this.imgArr[index] = url;
    if (_this.imgArr.length >= 5) {
     _this.allowAddImg = false
    }
    }
   }
   }
   if (dd < files.length - 1) {
   dd++
   } else {
   clearInterval(timer)
   }
  }, 1000)
  }
 },
 deleteImg: function(index) {
  this.imgArr.splice(index, 1)
  if (this.imgArr.length < 5) {
  this.allowAddImg = true
  }
 }
 }
}
</script>

以上這篇vue 使用原生組件上傳圖片的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3遞歸組件封裝的全過程記錄

    vue3遞歸組件封裝的全過程記錄

    組件是可以在自己的模板中調(diào)用自身的,不過他們只能通過name選項(xiàng)來做這件事,下面這篇文章主要給大家介紹了關(guān)于vue3遞歸組件封裝的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue中el-tab如何點(diǎn)擊不同標(biāo)簽觸發(fā)不同函數(shù)的實(shí)現(xiàn)

    vue中el-tab如何點(diǎn)擊不同標(biāo)簽觸發(fā)不同函數(shù)的實(shí)現(xiàn)

    el-tab本身的功能是點(diǎn)擊之后切換不同頁,本文主要介紹了vue中el-tab如何點(diǎn)擊不同標(biāo)簽觸發(fā)不同函數(shù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • vue實(shí)現(xiàn)超過兩行顯示展開收起的代碼

    vue實(shí)現(xiàn)超過兩行顯示展開收起的代碼

    這篇文章主要介紹了vue實(shí)現(xiàn)超過兩行顯示展開收起的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 監(jiān)聽element-ui table滾動(dòng)事件的方法

    監(jiān)聽element-ui table滾動(dòng)事件的方法

    這篇文章主要介紹了監(jiān)聽element-ui table滾動(dòng)事件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue3.x中emits的基本用法實(shí)例

    vue3.x中emits的基本用法實(shí)例

    emits是Vue3新增的選項(xiàng),emits主要作用在子組件中,用于接收在父組件中綁定的方法,這篇文章主要給大家介紹了關(guān)于vue3.x中emits的基本用法,需要的朋友可以參考下
    2022-07-07
  • 在VUE style中使用data中的變量的方法

    在VUE style中使用data中的變量的方法

    這篇文章主要介紹了在VUE style中使用data中的變量的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Vue實(shí)現(xiàn)時(shí)間軸效果

    Vue實(shí)現(xiàn)時(shí)間軸效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)時(shí)間軸效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • antd upload上傳組件如何獲取服務(wù)端返回?cái)?shù)據(jù)

    antd upload上傳組件如何獲取服務(wù)端返回?cái)?shù)據(jù)

    這篇文章主要介紹了antd upload上傳組件如何獲取服務(wù)端返回?cái)?shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用idea創(chuàng)建vue項(xiàng)目的圖文教程

    使用idea創(chuàng)建vue項(xiàng)目的圖文教程

    Vue.js是一套構(gòu)建用戶界面的框架,只關(guān)注視圖層,它不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合,下面這篇文章主要給大家介紹了關(guān)于使用idea創(chuàng)建vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue組件文檔生成備注詳解

    vue組件文檔生成備注詳解

    這篇文章主要介紹了vue組件文檔生成備注詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

珲春市| 双流县| 渝中区| 岑溪市| 宁南县| 保靖县| 乳山市| 孙吴县| 拉萨市| 新邵县| 和田县| 宜良县| 利辛县| 涟源市| 新和县| 金溪县| 旌德县| 安平县| 理塘县| 富顺县| 西昌市| 沾益县| 柳林县| 正蓝旗| 内乡县| 泸州市| 安陆市| 洱源县| 板桥市| 容城县| 和林格尔县| 军事| 西宁市| 云浮市| 鸡西市| 鄢陵县| 左贡县| 丽水市| 于田县| 涞源县| 博爱县|