vue 使用原生組件上傳圖片的實(shí)例
需求描述:需要將后臺返回的圖片路徑賦值到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",//后臺上傳圖片的方法 type: 'POST', dateType: 'json', cache: false, data: formData, processData: false, contentType: false, success: function (res) { if (res.ResultType == 3) { var filePath = res.Data.file;//后臺返回的圖片路徑 _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ǔ)充知識: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è)參考,也希望大家多多支持腳本之家。
- vue-cropper組件實(shí)現(xiàn)圖片切割上傳
- vue-cropper插件實(shí)現(xiàn)圖片截取上傳組件封裝
- vue 圖片裁剪上傳組件的實(shí)現(xiàn)
- vue3.0搭配.net core實(shí)現(xiàn)文件上傳組件
- Vue + Node.js + MongoDB圖片上傳組件實(shí)現(xiàn)圖片預(yù)覽和刪除功能詳解
- vue圖片上傳組件使用詳解
- vue中使用elementUI組件手動上傳圖片功能
- Vue開發(fā)之封裝上傳文件組件與用法示例
- vue圖片上傳本地預(yù)覽組件使用詳解
- vue-cli3.0+element-ui上傳組件el-upload的使用
- vue 實(shí)現(xiàn)上傳組件
相關(guān)文章
vue使用ArcGis?API?for?js創(chuàng)建地圖實(shí)現(xiàn)示例
這篇文章主要為大家介紹了vue使用ArcGis?API?for?js創(chuàng)建地圖實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08vue+elementUI實(shí)現(xiàn)簡單日歷功能
這篇文章主要為大家詳細(xì)介紹了vue+elementUI實(shí)現(xiàn)簡單日歷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09vue-element內(nèi)table插入超鏈接a標(biāo)簽的使用
在Vue Element的table組件中插入超鏈接,可以使用<el-link>標(biāo)簽替代傳統(tǒng)的<a>標(biāo)簽,實(shí)現(xiàn)更加整潔的UI設(shè)計(jì),具體操作是替換原有的<span>標(biāo)簽,直接使用<el-link>進(jìn)行超鏈接的插入,使得鏈接樣式與Element UI保持一致2024-09-09如何使用el-table實(shí)現(xiàn)純前端導(dǎo)出(適用于el-table任意表格)
我們?nèi)粘W鲰?xiàng)目,特別是后臺管理系統(tǒng),常常需要導(dǎo)出excel文件,這篇文章主要給大家介紹了關(guān)于如何使用el-table實(shí)現(xiàn)純前端導(dǎo)出的相關(guān)資料,本文適用于el-table任意表格,需要的朋友可以參考下2024-03-03Vue2實(shí)現(xiàn)未登錄攔截頁面功能的基本步驟和示例代碼
在Vue 2中實(shí)現(xiàn)未登錄攔截頁面功能,通??梢酝ㄟ^路由守衛(wèi)和全局前置守衛(wèi)來完成,以下是一個(gè)基本的實(shí)現(xiàn)步驟和示例代碼,幫助你創(chuàng)建一個(gè)簡單的未登錄攔截邏輯,需要的朋友可以參考下2024-04-04Vue3+vite實(shí)現(xiàn)使用svg可改變顏色的全過程
Vue3 + Vite 使用 SVG 的方法主要是為了引入和利用圖標(biāo)庫、自定義組件以及通過插件簡化項(xiàng)目構(gòu)建過程,這篇文章給大家介紹了Vue3+vite實(shí)現(xiàn)使用svg可改變顏色的全過程,需要的朋友可以參考下2024-07-07vuex新手進(jìn)階篇之a(chǎn)ctions的使用方法
actions用來處理mutations中的異步操作,觸發(fā)mutations中的函數(shù),下面這篇文章主要給大家介紹了關(guān)于vuex新手進(jìn)階篇之a(chǎn)ctions的使用方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10