「Window」で「atob」を実行できませんでした: デコードされる文字列は、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