Javascript 将blob内容保存到文件

Javascript 将blob内容保存到文件,javascript,blob,Javascript,Blob,我正在参与一个用JavaScript加密/解密文件的项目。为了将加密/解密的文件保存在磁盘中,我使用blob。所有的过程都在进行中,文件被加密,一些测试表明解密得太正确了。我甚至可以使用以前使用URI数据的blob方法保存大文件,当文件大小超过1MB时,会导致浏览器崩溃错误。但由于某些原因,我无法将解密的blob内容正确地保存到文件中。当它是TXT文件时,我会在文件内容的开头看到: data:text/plain;base64, 它继续使用base64中编码的文本内容。我需要将其保存

我正在参与一个用JavaScript加密/解密文件的项目。为了将加密/解密的文件保存在磁盘中,我使用blob。所有的过程都在进行中,文件被加密,一些测试表明解密得太正确了。我甚至可以使用以前使用URI数据的blob方法保存大文件,当文件大小超过1MB时,会导致浏览器崩溃错误。但由于某些原因,我无法将解密的blob内容正确地保存到文件中。当它是TXT文件时,我会在文件内容的开头看到:

     data:text/plain;base64,
它继续使用base64中编码的文本内容。我需要将其保存为原始文件,而不是base64。当我解密exe文件时,它已损坏,因此如果我将其打开到某个文本编辑器中,我会得到:

     data:application/x-msdownload;base64,
同样,文件似乎保存在base64中,并附加了此标头。以下是我创建/保存解密例程上blob内容的代码:

    reader.onload = function(e){

        var decrypted = CryptoJS.AES.decrypt(e.target.result, password)
                                .toString(CryptoJS.enc.Latin1);
        var blob = new Blob([decrypted]);
        var objectURL = window.URL.createObjectURL(blob);

        if(!/^data:/.test(decrypted)){
            alert("Invalid pass phrase or file! Please try again.");
            return false;
        }

        a.attr('href','' + objectURL);
        a.attr('download', file.name.replace('.encrypted',''));

        step(4);
    };

    reader.readAsText(file);
}

如何保存包含原始内容的文件?而不是header+base64 encode?

它看起来像是在加密之前对其base64进行了编码。在加密之前不要对它进行base64编码吗?我相信要使加密有效,所有内容都需要用base64编码。这很奇怪,因为下载文件的链接类似于:data:text/plain;base64,77u/Q3JhY2tlcnMgZG。。。但是当我这样把它设为blob时,我可以下载更大的数据量,链接是这样的:blob:null/666f4c47-0ef9-4315-9552-87a056d1813b,我得到了MIME头和base64编码的文件。。。这里可以做什么?base64编码对于数据URI是必需的,并且由浏览器自动解码,但对于BLOB则不需要。是的,这里发生的事情看起来正是如此。我不知道如何解决这个问题。。。blob是在base64内容中下载的,我曾尝试使用atob/btoa,但当它是二进制原始数据时,它破坏了内容。。。我删除了标题位置的indexOf',和atob所有剩下的内容。但是正如我所说的,内容被破坏了。为什么在加密之前要对文件进行base64编码?