var base64String = /*base64圖片串*/; //這里對base64串進行操作,去掉url頭,並轉換為byte var bytes = window.atob(base64String.split(',')[1]); //處理異常,將ASCII碼小於0的轉換為大於0,這里有兩種寫法 第一種: var ab = new ArrayBuffer(bytes.length); var ia = new Uint8Array(ab); for(var i = 0; i < bytes.length; i++){ ia[i] = bytes.charCodeAt(i); //這里有點疑惑,ia是怎么改變ab的?注:① } //Blob對象 var blob = new Blob([ab], {type: 'image/jpeg'}); //type為圖片的格式 //FormData對象 var fd = new FormData(); //TDOD Ajax或者其他方式上傳FormData對象 //FormData對象接受三個參數,第三個參數為文件名,通常我們只傳前兩個參數,第三個參數不傳則使用默認文件名,這里使用的Blob對象,所以需要一個文件名,用時間戳代替。 fd.append('file',blob, Date.now() + '.jpg'); 第二種: var array = []; for(var i = 0; i < bytes.length; i++){ array.push(bytes.charCodeAt(i)); } var blob = new Blob([new Uint8Array(array)], {type: 'image/jpeg'}); var fd = new FormData(); fd.append('file',blob, Date.now() + '.jpg'); //TDOD Ajax或者其他方式上傳FormData對象
原理:利用ArrayBuffer、Blob和FormData進行圖片上傳
