我正在尝试使用Blob
来创建一个通过服务器调用传递的数据的文件,以base64编码。原始文件是一个5,507字节长的Excel电子表格。 base64编码(带换行符)为7,441字节。使用命令行base64工具,我能够从base64版本构建原始文件的精确副本:
% base64 file.xlsx > file.enc
% base64 -d file.enc > copy.xlsx
% cmp file.xlsx copy.xlsx
% file --mime-type copy.xlsx
copy.xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
在打字稿中,我正在做:
import * as dld from 'file-saver';
const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
const data = atob(content)
const contentBlob = new Blob([data], { type: contentType });
dld.saveAs(contentBlob);
我已经验证二进制数据(上面的变量data
)至少以与原始文件的二进制内容相同的字节开头。它创建的文件长度为7,729字节,并且具有MIME类型application/zip
而不是预期的5,507字节。我在这里错过了什么?为了创建文件的客户端副本,我该怎么做?
答案 0 :(得分:0)
使用filesaver时,我们必须从Uint8Array
const pdfFileName = 'someName'
const fileDownload: Blob = new Blob([new Uint8Array(res.body)], {
type: contentType
});
fileSaver.saveAs(fileDownload, pdfFileName);