在我的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如何为二进制数据工作?
答案 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 );