最近做前端时,遇到后台接口限制上传的base64大小(超过8M时直接报错了),后台表示要限制大小,如果图片太大需要进行提示(我心想,难道不是后台没好好返回结果的错吗?)。但是实际上前端也是需要判断一下的,图片太大上传时体验也不好。
示例代码:
/**
* base64图片大小
* @param {string} str
*/
static getImgSize(str) {
// 带上前缀时需去掉前缀
// str = str.replace('data:image/png;base64,', '');
if (str instanceof String) {
var strLength = str.length;
var fileLength = parseInt(strLength - (strLength / 8) * 2);
// 由字节转换为KB
var size = "";
size = (fileLength / 1024).toFixed(2);
// 由字节转换为MB
size = (fileLength / 1024 * 1024).toFixed(2);
return parseInt(size);
}
return parseInt(0);
}
但这个结果和浏览器控制台显示的大小有一定差别,浏览器显示18.2M的base64字符串,该函数只返回了7M。我根据这个比例又在判断时调整了一下大小,判断当返回大于3M才能上传,不过实际base64肯定是大于3M的。技术不足,目前只能通过这种方式曲线救国了。