Failed to execute ‘atob‘ on ‘Window‘: The string to be decoded is base64转blob,base64转file下载

错误因为atob解码失败

 这种base64和常见的编码不同需要decodeURIComponent转译

function base64toBlob(url, isSvg) {
        // return new Blob([u8arr],{type: mime});
        // // return new File([u8arr], `${filename}`, {
        // //   type: mime,
        // // });
        let parts = url.split(","); // data:[<mime type>][;charset=<charset>][;base64],<encoded data>
 let mime = parts [0].match(/:(.*?);/)[1];
        let base64Encoded = parts[0].indexOf("base64") > -1;
        let bstr =isSvg)? decodeURIComponent(parts[1]):parts[1]; 
// svg的base64atob函数会解码失败需要使用decodeURIComponent转译

        base64Encoded && (bstr = window.atob(bstr));

        var n = bstr.length;
        var u8arr = new Uint8Array(n);

        while (n--) {
          u8arr[n] = bstr.charCodeAt(n);
        }

        return new Blob([u8arr],{type: mime});
      }
      const blob = base64toFile(ImgBase64,true);
function base64toFile(url, isSvg,filename) {
 

        let parts = url.split(","); // data:[<mime type>][;charset=<charset>][;base64],<encoded data>
 let mime = parts [0].match(/:(.*?);/)[1];
        let base64Encoded = parts[0].indexOf("base64") > -1;
        let bstr =isSvg)? decodeURIComponent(parts[1]):parts[1]; 
// svg的base64atob函数会解码失败需要使用decodeURIComponent转译

        base64Encoded && (bstr = window.atob(bstr));

        var n = bstr.length;
        var u8arr = new Uint8Array(n);

        while (n--) {
          u8arr[n] = bstr.charCodeAt(n);
        }

           return new File([u8arr], `${filename}`, {
          type: mime,
         });
      }
      const file= base64toFile(ImgBase64,true,'文件名');

猜你喜欢

转载自blog.csdn.net/qq_51389137/article/details/131120051