二进制数据的createObjectUrl失败

时间:2016-04-29 09:14:10

标签: javascript

在我的javascript中,我有一个base64编码的pkcs12对象,我想提供它作为下载链接。要下载的Pkcs12(pfx)文件是二进制数据。

所以我解码了对象,并尝试从中创建一个objectUrl:

var bin = atob(pkcs12);
var blob = new Blob([bin],
        { type : 'application/x-pkcs12' });
$scope.pkcs12Blob = (window.URL || window.webkitURL).createObjectURL( blob );

问题是,下载的文件比原始二进制数据大,并且不被识别为pkcs12。看起来好像在文件中引入了一些utf-8 / unicode东西。

如果我将原始base64编码数据提供给createObjectURL并下载base64编码文件,我可以解码下载的文件并获取有效的p12文件。

所以我想知道:createObjectURL如何为二进制数据工作?

1 个答案:

答案 0 :(得分:1)

由于某种原因,createObjectURL不接受二进制字符串但需要字节数组。这段代码就像一个魅力:

var bytechars = atob($scope.enrolledToken.pkcs12);
var byteNumbers = new Array(bytechars.length);
for (var i = 0; i < bytechars.length; i++) {
    byteNumbers[i] = bytechars.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: 'application/x-pkcs12'});
$scope.pkcs12Blob = (window.URL || window.webkitURL).createObjectURL( blob );