van-uploader保存文件到后端回顯后端接口返回的數(shù)據(jù)
實(shí)現(xiàn)功能:
在移動端使用van-uploader組件上傳圖片,然后調(diào)用接口保存到后端數(shù)據(jù)庫,提交保存信息成功后,調(diào)用另外的接口返回數(shù)據(jù)用來回顯uploaded的文件,(一般正常的返回數(shù)據(jù)的接口是個圖片地址,可以直接顯示),我現(xiàn)在遇到的功能是返回了一個圖片地址,然后我需要在前端頁面自己去調(diào)一次圖片地址的接口。
<div class="imgWrap"> <!-- :max-count="3" --> <van-uploader :disabled="isUpload" :before-read="beforeUpHandle" :after-read="onRead" @click="emitCont" v-model="fileList" multiple :max-count="15" @delete="handleRemove" > <van-button icon="photograph " ></van-button> <div class="addImg">添加圖片</div> </van-uploader> </div>
對van-uploader組件不熟悉的可以去官網(wǎng)自行查看
保存信息的接口代碼:
這里要在文件讀取完成后的回調(diào)函數(shù)中使用
async function onRead(file: any, detail: any) { ? ? ? ? ? ? let formData = new FormData() //格式化必不可少,在里面添加接口需要傳的參數(shù) ? ? ? ? ? ? formData.append('file', file.file) ? ? ? ? ? ? formData.append('sort', detail.index) ? ? ? ? ? ? getUploadKey(formData).then(res => { ? ? ? ? ? ? ? ? if (res.resultCode === '00') { ? ? ? ? ? ? ? ? ? ? let result = res.data ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }) ? ? ? ? }
接下來是回顯接口返回的數(shù)據(jù)在uploader,這里主要遇到的是v-model的fileList綁定的值,把接口獲取的值直接賦值給fileList即可以。
1、獲取接口的值,我這邊假設(shè)為fetchData,我做了一個判斷,fetchData有值才調(diào)用圖片地址的數(shù)據(jù)
if (fetchData.value.length > 0) { ? ? ? ? ? ? ? ? //當(dāng)回顯的圖片有多張時需要做一個循環(huán) ? ? ? ? ? ? ? ? for (let i = 0; i < fetchData.value.length; i++) { ? ? ? ? ? ? ? ? ? ? let item =fetchData.value[i]; ? ? ? ? ? ? ? ? ? ? item = { ? ? ? ? ? ? ? ? ? ? ? ? url: item.imgUrl, //這里的imgUrl后端接口返回的圖片地址 ? ? ? ? ? ? ? ? ? ? ? ? sort: item.sort,? ?//這里的數(shù)據(jù)按照自己的實(shí)際情況添加,我是后面需要到sort才添加的,不然有url即可顯示 ? ? ? ? ? ? ? ? ? ? }), ? ? ? ? ? ? ? ? ? ? ? ? console.log(item.url, 'uuuu') ? ? ? ? ? ? ? ? ? ? ?//開始調(diào)用圖片地址接口,因?yàn)槲疫@里圖片接口返回的二進(jìn)制流圖片數(shù)據(jù)格式,前端需要處理才能顯示。如下使用的是: 1、先設(shè)置axios接收參數(shù)格式為"arraybuffer" 2、轉(zhuǎn)換為base64格式圖片數(shù)據(jù)在img標(biāo)簽顯示 3、return 'data:image/png;base64,' + btoa( new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '') ); ? ? ? ? ? ? ? ? ? ? axios({ ? ? ? ? ? ? ? ? ? ? ? ? method: 'get', ? ? ? ? ? ? ? ? ? ? ? ? url: item.url, ? ? ? ? ? ? ? ? ? ? ? ? headers: { ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'XXX-XXX-TOKEN': XXXXXX,//需要到token的小伙伴借鑒 ? ? ? ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? ? ? ? responseType: 'arraybuffer', ? ? ? ? ? ? ? ? ? ? }) ? ? ? ? ? ? ? ? ? ? ? ? .then(res => { ? ? ? ? ? ? ? ? ? ? ? ? //若是沒有做這個obj的封裝,圖片將無法顯示。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? let obj = { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? content: `data:image/png;base64,${btoa( ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new Uint8Array(res.data).reduce( ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (data, byte) => data + String.fromCharCode(byte), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '', ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )}`, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sort: item.sort, ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? fileList.value.push(obj) ? ? ? ? ? ? ? ? ? ? ? ? }) ? ? ? ? ? ? ? ? ? ? ? ? .catch(err => { ? ? ? ? ? ? ? ? ? ? ? ? ? ? reject(err.data) ? ? ? ? ? ? ? ? ? ? ? ? }) ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }
補(bǔ)充:van-uploader這個組件要回顯圖片兩種方法:
1、提供圖片的base64字符串
直接把base64字符串加前綴之后,封裝成一個obj放入fileList,就可以直接回顯圖片
2、提供文件的二進(jìn)制流
(這種能回顯圖片因?yàn)楹蠖四芙邮苓@樣的請求方式。但現(xiàn)在很多框架不支持沒有完整請求頭的請求,那么就會請求不到后端圖片回顯失敗,這種方式還是有一定局限性的),我一開始用的這個方法就是沒有實(shí)現(xiàn)回顯所以又考慮轉(zhuǎn)為base64格式來顯示。
總結(jié)
到此這篇關(guān)于van-uploader保存文件到后端回顯后端接口返回的數(shù)據(jù)的文章就介紹到這了,更多相關(guān)van-uploader保存文件到后端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目中定義全局變量、函數(shù)的幾種方法
這篇文章主要介紹了vue項(xiàng)目中定義全局變量、函數(shù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11如何在vue3中使用滑塊檢驗(yàn)vue-puzzle-verification
這篇文章主要介紹了在vue3中使用滑塊檢驗(yàn)vue-puzzle-verification的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11詳解Vue CLI 3.0腳手架如何mock數(shù)據(jù)
這篇文章主要介紹了詳解Vue CLI 3.0腳手架如何mock數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11VUE之關(guān)于store狀態(tài)管理核心解析
這篇文章主要介紹了VUE之關(guān)于store狀態(tài)管理核心解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06