JavaScript js判断base64大小

最近做前端时,遇到后台接口限制上传的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的。技术不足,目前只能通过这种方式曲线救国了。

你可能感兴趣的:(JavaScript js判断base64大小)