Vue結(jié)合ElementUI上傳Base64編碼后的圖片實(shí)例
ElementUI上傳Base64編碼后的圖片
自我認(rèn)為ElementUI還是一個(gè)很不錯(cuò)的寫(xiě)手機(jī)端的組件,所以這次做小項(xiàng)目的時(shí)候就用了ElementUI的Upload組件來(lái)實(shí)現(xiàn)圖片的上傳,不過(guò)ElementUI組件的上傳圖片更易于實(shí)現(xiàn)圖片以File文件的形式實(shí)現(xiàn),但是這次我需要把圖片轉(zhuǎn)換為base64編碼來(lái)實(shí)現(xiàn)圖片的上傳。
安裝ElementUI
npm i element-ui -S
按需引入(當(dāng)然如果需要你也可以全部引入)
import { Upload } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(Upload);上傳實(shí)現(xiàn)
<template> ? ? <div> ? ? ? ?<el-upload ? ? ? ? ? class="avatar-uploader" ? ? ? ? ? :action="actionUrl" ? ? ? ? ? :show-file-list="false" ? ? ? ? ? :on-change="getFile"> ? ? ? ? ? <img v-if="imageUrl" ref="phoUrl" :src="imageUrl" class="avatar"> ? ? ? ? ? <i v-else class="el-icon-plus avatar-uploader-icon"></i> ? ? ? ? </el-upload> ? ? </div> </template>
<script>
import {Toast} from "mint-ui";
export default {
? ?data() {
? ? ? return {
? ? ? ?actionUrl:'',
? ? ? ?imageUrl:'', //上傳圖片
? ? ? };
? ? },
? ? methods: {
? ? ?getBase64(file){ ?//把圖片轉(zhuǎn)成base64編碼
? ? ? ? ?return new Promise(function(resolve,reject){
? ? ? ? ? ? ?let reader=new FileReader();
? ? ? ? ? ? ?let imgResult="";
? ? ? ? ? ? ?reader.readAsDataURL(file);
? ? ? ? ? ? ?reader.onload=function(){
? ? ? ? ? ? ? ? ?imgResult=reader.result;
? ? ? ? ? ? ?};
? ? ? ? ? ? ?reader.onerror=function(error){
? ? ? ? ? ? ? ? ?reject(error);
? ? ? ? ? ? ?};
? ? ? ? ? ? ?reader.onloadend=function(){
? ? ? ? ? ? ? ? ?resolve(imgResult);
? ? ? ? ? ? ?}
? ? ? ? ?})
? ? ?},
? ? ?getFile(file,fileList){ ?//上傳頭像
? ? ? ?this.getBase64(file.raw).then(res=>{
? ? ? ? ? ?this.$http.post('home/ImgUpload',{"img":res}).then(result=>{
? ? ? ? ? ? ? ?if(result.body.status===200){
? ? ? ? ? ? ? ? ? ?this.imageUrl=result.body.data;
? ? ? ? ? ? ? ?}else{
? ? ? ? ? ? ? ? ? ?Toast('圖片上傳失敗');
? ? ? ? ? ? ? ?}
? ? ? ? ? ?})
? ? ? ?})
? ? ?}
? ? }
}
</script><style>
? .avatar-uploader .el-upload {
? ? border: 1px dashed #d9d9d9;
? ? border-radius: 6px;
? ? cursor: pointer;
? ? position: relative;
? ? overflow: hidden;
? ? width:101px;
? ? height:101px;
? }
? .avatar-uploader .el-upload:hover {
? ? border-color: #409EFF;
? }
? .avatar-uploader .el-upload .el-upload__input{
? ? ? display: none;
? }
? .avatar-uploader-icon {
? ? font-size: 28px;
? ? color: #8c939d;
? ? width: 100px;
? ? height: 100px;
? ? line-height: 100px;
? ? text-align: center;
? }
? .avatar {
? ? width: 100px;
? ? height: 100px;
? ? display: block;
? }
</style>ElementUI把上傳的圖片轉(zhuǎn)為Base64
使用組件,然后on-change綁定一個(gè)方法來(lái)獲取文件信息,auto-upload設(shè)置為false即可
?<el-upload action='' :on-change="getFile" :limit="1" list-type="picture" :auto-upload="false"> ? ? ? ? ? ? <el-button size="small" type="primary">選擇圖片上傳,最多上傳一張圖片</el-button> ? ? ? ? ? </el-upload>
定義methods方法,當(dāng)上傳文件就會(huì)觸發(fā)綁定的函數(shù),然后文件的內(nèi)容就會(huì)綁定到函數(shù)的參數(shù)里面,這樣用file.raw就可以獲取文件的內(nèi)容了。
? getFile(file, fileList) {
? ? ?console.log(file.raw)
? ? },然后自定義一個(gè)方法,用來(lái)把圖片內(nèi)容轉(zhuǎn)為base64格式,imgResult就是base64格式的內(nèi)容了。轉(zhuǎn)為base64字符串要調(diào)用h5特性中的FileReader這個(gè)api,但是這個(gè)api不能return,所以用promise封裝一下。
?getBase64(file) {
? ? ? return new Promise(function(resolve, reject) {
? ? ? ? let reader = new FileReader();
? ? ? ? let imgResult = "";
? ? ? ? reader.readAsDataURL(file);
? ? ? ? reader.onload = function() {
? ? ? ? ? imgResult = reader.result;
? ? ? ? };
? ? ? ? reader.onerror = function(error) {
? ? ? ? ? reject(error);
? ? ? ? };
? ? ? ? reader.onloadend = function() {
? ? ? ? ? resolve(imgResult);
? ? ? ? };
? ? ? });
? ? },最后調(diào)用一下
?getFile(file, fileList) {? ??
? ? ? this.getBase64(file.raw).then(res => {
? ? ? console.log(res)
? ? ? });
? ? },以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue?elementUI?處理文件批量上傳方式
- 詳解Vue ElementUI手動(dòng)上傳excel文件到服務(wù)器
- Vue+elementUI實(shí)現(xiàn)多圖片上傳與回顯功能(含回顯后繼續(xù)上傳或刪除)
- vue中使用elementUI組件手動(dòng)上傳圖片功能
- vue+elementUI實(shí)現(xiàn)圖片上傳功能
- vue+elementUi圖片上傳組件使用詳解
- vue+elementUI實(shí)現(xiàn)表單和圖片上傳及驗(yàn)證功能示例
- Vue+Axios實(shí)現(xiàn)文件上傳自定義進(jìn)度條
- node+axios實(shí)現(xiàn)服務(wù)端文件上傳示例
- elementui+vue+axios實(shí)現(xiàn)文件上傳本地服務(wù)器
相關(guān)文章
Vue3中ref和reactive的基本使用及區(qū)別詳析
這篇文章主要給大家介紹了關(guān)于Vue3中ref和reactive的基本使用及區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-07-07
vue實(shí)現(xiàn)壓縮圖片預(yù)覽并上傳功能(promise封裝)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)壓縮圖片預(yù)覽并上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Vue實(shí)現(xiàn)登錄保存token并校驗(yàn)實(shí)現(xiàn)保存登錄狀態(tài)的操作代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)登錄保存token并校驗(yàn)實(shí)現(xiàn)保存登錄狀態(tài),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-02-02
vue中實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)組內(nèi)部元素
這篇文章主要介紹了vue中實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)組內(nèi)部元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
前端項(xiàng)目中的Vue、React錯(cuò)誤監(jiān)聽(tīng)
這篇文章主要介紹了前端項(xiàng)目中的Vue、React錯(cuò)誤監(jiān)聽(tīng),文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下2022-04-04
Vue利用openlayers實(shí)現(xiàn)點(diǎn)擊彈窗的方法詳解
點(diǎn)擊彈窗其實(shí)就是添加一個(gè)彈窗圖層,然后在點(diǎn)擊的時(shí)候讓他顯示出來(lái)罷了。本文將利用openlayers實(shí)現(xiàn)這一效果,快跟隨小編一起學(xué)習(xí)一下吧2022-06-06

