1. 程式人生 > >blob物件轉換為blob(url)的問題

blob物件轉換為blob(url)的問題

這兩天踩了一個坑與大家分享,同時記錄自己的錯誤,由於公司業務的需求,需要把本地圖片上傳給後臺,可是問題來了我的ajax傳送了過去但是報了錯,我問後臺同事,他說我傳送過去的東西原始檔為空,問了後臺才知道我不能直接發我本地獲取的base64過去,要轉成blob物件 function dataURItoBlob(base64Data) { var byteString; if(base64Data.split(’,’)[0].indexOf(‘base64’) >= 0) byteString = atob(base64Data.split(’,’)[1]); else byteString = unescape(base64Data.split(’,’)[1]); var mimeString = base64Data.split(’,’)[0].split(’:’)[1].split(’;’)[0]; var ia = new Uint8Array(byteString.length); for(var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new Blob([ia], { type: mimeString }); } 上面這個函式是封裝好的,把檔案或者base傳進去就能出來一個blob物件(說白了二進位制檔案) 然後轉成了blob物件後就能成功傳送了,問題又來了後臺給我返回了新的base64編碼(後臺處理完成後的圖片base64)我要把這個base64轉成blob開頭的blob連結,於是我就一次又一次的使用如下方法 window.URL = window.URL || window.webkitURL; var url = window.URL.createObjectURL(‘這裡是我傳入的base64’); 但是我的控制檯報了個錯:Uncaught TypeError: Failed to execute ‘createObjectURL’ on ‘URL’: No function was found that matched the signature provided 天吶我實在是想不通為什麼要報錯,這個時候很無助,問同事也無果,就索性自己來解決。 然後就這樣困擾了一天,直到我在一個前端論壇看到了這句話:‘當我傳遞給createObjectURL原始資料時,我遇到了同樣的錯誤:window.URL.createObjectURL(data)它必須是Blob,File或MediaSource物件,而不是資料本身。’原來我把base64傳進去是錯誤的做法,正確的做法是我應該把後臺返回的base64,再呼叫一次上面封裝好的函式把base64轉成blob物件在傳入這裡: window.URL = window.URL || window.webkitURL; var url = window.URL.createObjectURL(‘必須是Blob,File或MediaSource物件’); 這樣就能得到下面這樣的連結了:blob:

http://xxx.x.x.x:xxxx/ba6468f9-4f06-4683-98f0-31e7ead2815e 這連結能幹什麼不用我多說了吧! 踩坑之路,說的不好的地方望指正。