在上一篇照片上傳博文中(http://www.javashuo.com/article/p-rfjypxlp-hg.html)有一段關於base64轉blob的代碼,弄懂這篇講的,javascript
那段代碼也就一目瞭然了。html
一:base6四、atob、btoajava
Base64是常見的用於傳輸8Bit的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。Base64編碼是canvas
從二進制到字符的過程,可用於在HTTP環境下傳遞較長的標識信息。Base64編碼具備不可讀性,須要解碼後才能閱讀。數組
1.使用atob()方法解碼base64形式的編碼字符。函數
該方法解碼由btoa()編碼的字符。編碼
2.使用btoa()方法使字符編碼成base64的形式。code
該方法使用"A-Z", "a-z", "0-9", "+", "/" 和 "="字符進行編碼。htm
該方法的編碼由atob()解碼。對象
二:blob
BLOB (binary large object),二進制大對象,是一個能夠存儲二進制文件的容器。
建立Blob對象的方法有幾種,能夠調用Blob構造函數,還可使用一個已有Blob對象上的slice()
方法切出另外一個Blob對象,還能夠
調用canvas
對象上的toBlob
方法。
new Blob( [可選] Array parts, [可選] BlobPropertyBag properties ); 例如: var myBlob= new Blob(arrayBuffer); 其中,兩個參數的含義是: parts 一個數組,包含了將要添加到Blob對象中的數據。數組元素能夠是任意多個的ArrayBuffer, ArrayBufferView(typed array), Blob, 或者DOMString對象。 properties 一個對象,設置Blob對象的一些屬性。目前僅支持一個type屬性,表示Blob的類型。
有了以上的知識,再來看看代碼:
function b64toBlob(b64Data, contentType, sliceSize) { // 文件類型 contentType = contentType || ''; // 文件分割的大小,通常上傳文件512 sliceSize = sliceSize || 512; // 解碼base64 var byteCharacters = atob(b64Data); var byteArrays = []; // 構造blob的第一個參數數據 for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length); for (var i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } var byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray); } // 建立blob var blob = new Blob(byteArrays, {type: contentType}); return blob; }