最近做前端時(shí),遇到后臺(tái)接口限制上傳的base64大?。ǔ^8M時(shí)直接報(bào)錯(cuò)了),后臺(tái)表示要限制大小,如果圖片太大需要進(jìn)行提示(我心想,難道不是后臺(tái)沒好好返回結(jié)果的錯(cuò)嗎?)。但是實(shí)際上前端也是需要判斷一下的,圖片太大上傳時(shí)體驗(yàn)也不好。
示例代碼:
/**
* base64圖片大小
* @param {string} str
*/
static getImgSize(str) {
// 帶上前綴時(shí)需去掉前綴
// str = str.replace('data:image/png;base64,', '');
if (str instanceof String) {
var strLength = str.length;
var fileLength = parseInt(strLength - (strLength / 8) * 2);
// 由字節(jié)轉(zhuǎn)換為KB
var size = "";
size = (fileLength / 1024).toFixed(2);
// 由字節(jié)轉(zhuǎn)換為MB
size = (fileLength / 1024 * 1024).toFixed(2);
return parseInt(size);
}
return parseInt(0);
}
但這個(gè)結(jié)果和瀏覽器控制臺(tái)顯示的大小有一定差別,瀏覽器顯示18.2M的base64字符串,該函數(shù)只返回了7M。我根據(jù)這個(gè)比例又在判斷時(shí)調(diào)整了一下大小,判斷當(dāng)返回大于3M才能上傳,不過實(shí)際base64肯定是大于3M的。技術(shù)不足,目前只能通過這種方式曲線救國(guó)了。