当前位置: 首页 > 知识库问答 >
问题:

二进制数据的createObjectUrl失败

濮阳国兴
2023-03-14

在我的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内容。

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

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

共有1个答案

阳俊德
2023-03-14

出于某种原因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 );
 类似资料:
  • 问题内容: 已关闭 。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 如何在MySQL中存储二进制数据? 问题答案: phpguy的答案是正确的,但我认为那里的其他细节存在很多混乱。 基本答案是在数据类型/属性域中。 BLOB 是Binary Large Object的缩写,该列数据类型专用于处理二进制数据。 请参见MyS

  • 问题内容: 我正在编写一些代码来与Redmine交互,并且作为过程的一部分,我需要上传一些文件,但是我不确定如何从包含二进制文件的python发出POST请求。 我正在尝试模仿这里的命令: 在python中(如下),但它似乎不起作用。我不确定问题是否与编码文件有关,或者标题是否有问题。 我可以访问服务器,它看起来像是编码错误: 问题答案: 基本上您所做的是正确的。查看链接到的redmine文档,U

  • 我正在编写一些与redmine接口的代码,并且我需要上传一些文件作为过程的一部分,但是我不确定如何从包含二进制文件的python发出POST请求。 我尝试在这里模拟命令: 在python中(如下),但它似乎不起作用。我不确定这个问题是否与文件编码有关,或者标题是否有问题。 我可以访问服务器,它看起来像一个编码错误:

  • 问题内容: 有没有一种类型或方式以二进制级别在oracle中存储数据。我对表中的dml和pl / sql的操作都感兴趣。 当前所有二进制元素都以varchar2(1000)=‘11111 …0000.1111’的形式存储,但是操作和数据存储量很大,因此需要一些优化解决方案。如果此数据可以二进制格式存储,则将需要1000/8字节(具有>700mn条记录) 可能的解决方案是对这些操作使用某种Java

  • 用途: 在字符串与二进制数据之间相互转换 打包和拆包 import struct import binascii values = (1, 'ab'.encode('utf-8'), 2.7) s = struct.Struct('I 2s f') packed_data = s.pack(*values) print('Original values:', values) print('Fo

  • 问题内容: 我正在使用python shell来解决print命令在python中的工作方式。 当我输入 打印01 1 打印010 8 打印0100 64 打印030 24 这里发生了什么?只是基数2?为什么第二个位置的“一个”打印为8?如果不是二进制,应该不是2吗? 问题答案: 以0开头的数字在Python 2中将其标记为八进制。这被认为是令人困惑,令人惊讶且不一致的,因为以0x开头会将其标记为