Taro chooseImage和uploadFile兼容小程序和h5端

chooseImage 這個(gè)API在小程序端并無(wú)太大的問題,相信看著文檔各位小伙伴都能擼出來并和后臺(tái)對(duì)接好,這篇文章只是為了解決h5端的問題:
h5端的chooseImage拿到的圖片數(shù)據(jù)是以blob開頭的數(shù)據(jù)格式,然而這并不是我們想要的,即便丟到后端也無(wú)法對(duì)接;因此我在網(wǎng)上找了很多解決這個(gè)問題的辦法,然而并沒有清晰的描述的,唯有看到一篇文章:

https://blog.csdn.net/SNC8F/article/details/102893733

這篇文章為我解除疑惑,但是我想完善一點(diǎn)這篇文章,所以我就厚臉皮的把它轉(zhuǎn)變?yōu)槲业脑瓌?chuàng),哈哈哈?。?!

廢話不多說,上代碼。。。

 Taro.chooseImage({count:  9}).then(res => {
        console.log(res)  //這里我們拿到的是blob格式的圖片數(shù)據(jù),但這不是真正的blob格式數(shù)據(jù),我們需要將數(shù)據(jù)fetch一下

    fetch(res.tempFilePaths[0]).then(fetchRes => {
        return fetchRes.blob();
    }).then(data => {
        let reader = new FileReader();
        reader.onloadend = () => {
           tempFilePaths[i] = reader.result; //這里得到base64的圖片格式
         };
        reader.readAsDataURL(data); //base64的圖片格式是通過這個(gè)方法去得到的,如果傳入的不是真正的blob格式的數(shù)據(jù)進(jìn)去會(huì)報(bào)錯(cuò)的,所以要特別注意傳入的格式是否blob格式
    })
 })

eader.readAsDataURL(data); //base64的圖片格式是通過這個(gè)方法去得到的,如果傳入的不是真正的blob格式的數(shù)據(jù)進(jìn)去會(huì)報(bào)錯(cuò)的,所以要特別注意傳入的格式是否blob格式

到了這里大部分人應(yīng)該就沒問題了,前提是后端愿意接受base64的數(shù)據(jù)格式,然而base64數(shù)據(jù)格式和小程序獲取到的http格式是完全不一樣的,如果你的后端不愿意做兼容,那么h5端還是沒法繼續(xù)跑下去,要如何將blob轉(zhuǎn)為http格式,目前我也還在探索中,希望有知道的小伙伴可以留言告知一下,讓我把這部分補(bǔ)充完整,到了這里這篇文章基本就結(jié)束了, 但是為了文章的完整性,我決定還是補(bǔ)上 轉(zhuǎn)blob的API,不多就幾句代碼而已:

fetch(res.tempFilePaths[0]).then(fetchRes => {
    return fetchRes.blob();
}).then(data => {
    let reader = new FileReader();
    reader.onloadend = () => {
       tempFilePaths[i] = reader.result;
      //兼容:mozilla(firefox)||webkit or chrome
       letwindowURL = window.URL || window.webkitURL;
       //createObjectURL創(chuàng)建一個(gè)指向該參數(shù)對(duì)象(圖片)的URL
        let dataURL = windowURL.createObjectURL(data);
     };
     reader.readAsDataURL(data)
})

這段代碼是blob轉(zhuǎn)base64后再重新轉(zhuǎn)回blob,而實(shí)現(xiàn)這個(gè)功能是由window.URL.createObjectURL()這個(gè)API實(shí)現(xiàn)的。

好了,到此就結(jié)束了,如果上文有錯(cuò)誤之處,請(qǐng)留言指明,感謝萬(wàn)分

如果此文對(duì)你有用請(qǐng)動(dòng)動(dòng)你的小手點(diǎn)個(gè)贊!謝謝?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • 去年有段時(shí)間得空,就把谷歌GAE的API權(quán)威指南看了一遍,收獲頗豐,特別是在自己幾乎獨(dú)立開發(fā)了公司的云數(shù)據(jù)中心之后...
    騎單車的勛爵閱讀 21,132評(píng)論 0 41
  • 文件操作一直是早期瀏覽器的痛點(diǎn),全封閉式的不給JavaScript操作的空間。隨著H5新接口的推出這個(gè)壁壘被打破了...
    JunChow520閱讀 1,650評(píng)論 0 2
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,449評(píng)論 0 15
  • simplify the life HTML5 File API — 讓前端操作文件變的可能 前言 在 HTML5...
    我是強(qiáng)強(qiáng)閱讀 3,799評(píng)論 0 1
  • 前言 在 HTML5 File API 出現(xiàn)之前,前端對(duì)于文件的操作是非常有局限性的,大多需要配合后端實(shí)現(xiàn)。出于安...
    D_R_M閱讀 2,365評(píng)論 0 2

友情鏈接更多精彩內(nèi)容