FileSaver创建的文件内容与原始文件不同

时间:2018-04-12 17:59:49

标签: angular typescript base64 filesaver.js

我正在尝试使用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字节。我在这里错过了什么?为了创建文件的客户端副本,我该怎么做?

1 个答案:

答案 0 :(得分:0)

使用filesaver时,我们必须从Uint8Array

初始化blob

const pdfFileName = 'someName' const fileDownload: Blob = new Blob([new Uint8Array(res.body)], { type: contentType }); fileSaver.saveAs(fileDownload, pdfFileName);