在前后端分離的 Web 應用中,前端往往需要把圖片或其他二進制數據傳遞到后端,以便進行一些處理,而 base64 編碼是一種常用的方式。Base64 是一種將二進制數據編碼成 ASCII 字符的方法,通常用于在不支持二進制數據傳輸的場景下進行數據傳輸。
在前端,我們可以使用 JavaScript 的 atob 和 btoa 方法進行 Base64 編解碼。
// 將文件轉換為 base64 編碼 function fileToBase64(file) { return new Promise((resolve, reject) =>{ const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () =>{ const base64Str = reader.result.split(',')[1]; resolve(base64Str); }; reader.onerror = reject; }); } // 將 base64 編碼轉換為文件 function base64ToFile(base64Str) { const arr = base64Str.split(','); const mime = arr[0].match(/:(.*?);/)[1]; const bstr = atob(arr[1]); let n = bstr.length; const u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], Math.random().toString(36).slice(-8), { type: mime }); }
在使用 Base64 編碼傳遞數據時,我們通常要考慮到傳輸量過大的問題。因為 Base64 編碼會使數據的大小增加約三分之一,所以對于大文件或者大規模數據的傳輸,最好對其進行壓縮。在 JavaScript 中,我們可以使用 Pako.js 庫進行數據壓縮。
// 壓縮數據 function compressData(data) { return pako.gzip(data); } // 解壓數據 function decompressData(compressedData) { return pako.ungzip(compressedData, { to: 'string' }); }
在前端將數據進行壓縮后,我們需要將其轉換成字符串類型的 JSON 數據,并通過 AJAX 請求或其他方式傳遞到后端。在后端,我們可以使用相應語言提供的 Base64 解碼庫進行解碼,然后再進行其他操作。
總的來說,Base64 編碼是前端進行二進制數據傳輸的常用方式,但要注意到它會使數據量大大增加,需要適時進行壓縮。