下载以 base64 编码的文件时,pdf 文件已损坏

use*_*274 2 javascript mysql

我尝试下载以前使用 base 64 编码的 pdf 文件。

我尝试从一个锚标签下载它,如下

<a href="data:application/pdf;base64,JVBERi0xLjUKJbXtrvsKMyAwIG9..." download="file.pdf">Download</a>;
Run Code Online (Sandbox Code Playgroud)

该文件已下载,但当我尝试打开它时,我收到一条消息,指出该文件已损坏或已损坏。

有趣的是,如果我将 href 更改为编码图像数据,则会按预期下载并打开文件。

我找到了这个例子http://jsfiddle.net/filixix/0816jdfq/并且我看到它从data:application/pdf;base64,改为data:application/octet-stream;base64,我尝试过但我得到了相同的结果。

更新

我将pdf文件编码如下

const element = document.querySelector('#file'); // input type file

element.addEventListener('change', handleChange);

function handleChange() {
    const file = this.files[0];
    const fileReader = new FileReader();

    fileReader.onload = function() {
        const data = this.result;

        //  store data in database in a text type field
    };

    fileReader.readAsDataURL(file);
}
Run Code Online (Sandbox Code Playgroud)

然后,在我想下载文件的视图中,我意识到我评论的逻辑

num*_*8er 6

一般想法按预期工作。

但我建议pdf作为文件保留

原因您损坏的 pdf 问题可能是由于db 字段大小(如果您将该字符串保留在 db 中)或浏览器的请求 url限制

所以

将数据存储在数据库中的文本类型字段中

如果您不打算转移到文件存储,只需字段类型更改为:LONGBLOB