简体   繁体   English

将二进制数据转换为base-64 javaScript

[英]convert binary data to base-64 javaScript

I have a problem to convert binary data to base-64 in JS. 我在JS中将二进制数据转换为base-64时遇到问题。 I try all the things that exists on the net include this How to parse into base64 string the binary image from response? 我尝试网络上存在的所有内容包括此内容如何将响应中的二进制图像解析为base64字符串? , but everyone return a wrong base-64 and I don't find why ! ,但每个人都返回了错误的base-64,我不知道为什么!

**I try this solution Retrieving binary file content using Javascript, base64 encode it and reverse-decode it using Python but the convert to base-64 not work for me! **我尝试此解决方案, 使用Java脚本检索二进制文件内容,使用base64对其进行编码,然后使用Python对其进行反向解码,但是转换为base-64对我不起作用! It's return something wrong . 它返回了错误的东西。

I get a string binary response from server and I want to convert him to base-64 that I can create a file from him and to show him to user. 我从服务器收到一个字符串二进制响应,我想将其转换为base-64,以便可以从他创建一个文件并将其显示给用户。 This is the response I get from server to png picture for example: 例如,这是我从服务器到png图片的响应:

�PNG

IHDRrP6�tEXtSoftwareAdobe ImageReadyq�e<�IDATx�b���?�#6��g��T=;��� >č�&g��:��A�@���LX��0�A�T    >[40f��H��>0`B
#��<��0a�+���b�
�o����­o0��~�7��'�xlP����e��.3<x��A�����~�w��$�@90���
`���Ivd�1@c�2���F&�ATM��.�p���[���8��p�]�@,�����pyP��q���pB����u�����3l(6A `@􁳟qzK�Q���M�8Q�Ӑ&��1�$(�@� R�81H��P�&P�����ҟ1\��V��3P�d��fp0�#;��ld �yt�(����
J{�М��>>@{!А�3%?@/�
0�O�U,{�9IEND�B`�

Now , I want to take this binary string and to convert him . 现在,我要使用此二进制字符串并将其转换。

For example , the real base 64 of png picture is: 例如,png图片的实际基数为64:

iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaJJREFUeNpi/P//PwO1ACM2wf9njBWAVD0QOwCxApLUAyA+AMSNjCZnH6DoATqKEYtB/UCqgAiHTAAaWIjTMKBB84FUAgk+WwA0MBFmGBOaixJIDKYEqD4wYEIKI7DXHjz/xTBh+SuGD5//YtUNkm+c9Zzhwq1vMKECqH6IN5G9J+h4AWxQgIMAw/oeZQzDFP0uMzx49otBgJeZ4f1+A7h3GYzPJLJAOQEw0fn1CmCFuADIAgVJdmSXMUBjHe4yyhOb8RlGJqBBDlRNtMgu23DgA8PFW98Z9NU4weGGDnDKA10GC7MPQCwAiqnAkrtweVDYGahxwfmgcEKO5fubdYHhxwbTzwAzbAMoNkESIANgGkD0gbOfcXpLgAceURvg6QwIFsITTaQ4UeHTkCaFHOsLMfIkKOxAuCBSDBSGODFIHqYWlgNQ8iZQEBSa+4HYAJHSnzFcuPkdHFagsDNQ52SI9xFmcDDmhQcjEDsC8+cHbBkdZCCxeXQCtCj6gLMIghoKSnvx0JyBnD4+QAN7IdCQAwTLMxwFJQg/QC8Q0Q0DCDAA/k/PVSx73TkAAAAASUVORK5CYII=

When I use any kind of code to convert to base-64 it's return this string : 当我使用任何类型的代码转换为base-64时,都会返回以下字符串:

77+9UE5HDQoaCgAAAA1JSERSAAAAEwAAABMIBgAAAHJQNu+/vQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHvv71lPAAAAe+/vUlEQVR477+9Yu+/ve+/ve+/vT8D77+9ACM277+977+9Z++/vRXvv71UPRA7AO+/vQLvv73vv70DID4AxI3vv70mZx/vv73vv70BOu+/vRHvv71B77+9QO+/ve+/vQjvv71MABpY77+977+9MO+/vUHvv73vv71UAgk+WwA0MBFmGBPvv73vv70SSAzvv70E77+9PjBgQgoj77+977+9Hjzvv73vv70wYe+/vSvvv70P77+977+9Yu+/vQ3vv71v77+977+977+977+9wq1vMO+/vQLvv71+77+9N++/ve+/vSfvv714AWxQ77+977+9AO+/ve+/vR5lDO+/vRTvv70uMzx477+977+9Qe+/ve+/ve+/ve+/ve+/vX4D77+9dxnvv73vv70k77+9QDkBMO+/ve+/ve+/vQpg77+977+9AO+/vQIFSXZk77+9MUBjHe+/vTLvv70T77+977+9GUYm77+9QQ5UTe+/ve+/vS7vv71w77+9A++/ve+/vVvvv70Z77+977+9OO+/ve+/ve+/vQ5w77+9A10GC++/vQ9ALADvv73vv73vv73vv73vv71weVDvv70Z77+9ce+/ve+/ve+/vXBC77+977+977+977+9de+/ve+/ve+/vQbvv73vv70AM2wDKDZBEiADYBpA9IGzn3F6S++/vQceURvvv73vv70MCBbvv70TTe+/vThR77+905Am77+9HO+/vQsx77+9JCjvv71A77+9IFIMFO+/vTgxSB7vv70W77+9A1Dvv70mUBAU77+977+977+977+9AO+/vdKfMVzvv73vv70dHFbvv73vv70zUO+/vWTvv73vv70RZnAw77+977+9ByMQOwLvv73vv70HbBkdZCDvv715dALvv70o77+977+977+9CO+/vRoKSnvvv73QnO+/ve+/vT4+QAN7IdCQAwTvv70zHAUlCD9ALxDvv70NAwgwAO+/vU/vv71VLHvvv705AAAAAElFTkTvv71CYO+/vQ==

I find this solution for encode to base 64 : https://koding.com/Activity/base64-encoding And now the encode is closer to what need to be but still not help: 我找到了针对base 64编码的解决方案: https : //koding.com/Activity/base64-encoding现在,编码更接近于需要的编码,但仍然无济于事:

/VBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDb9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5cf1lPAAAAf1JREFUeP1i/f39PwP9ACM2/f1n/RX9VD0QOwD9Av39AyA+AA39Jmcf/f0BOv0R/UH9QP39CP1MABpY/f0w/UH9/VQCCT5bADQwEWYYE/39EkgM/QT9PjBgQgoj/f0ePP39MGH9K/0P/f1i/Q39b/39/f2tbzD9Av1+/Tf9/Sf9eAFsUP39AP39HmUM/RT9LjM8eP39Qf39/f39fgP9dxn9/ST9QDkBMP39/Qpg/f0A/QIFSXZk/TFAYx39Mv0T/f0ZRib9QQ5UTf39Lv1w/QP9/Vv9Gf39OP39/Q5w/QNdBgv9D0AsAP39/f39cHlQ/Rn9cf39/XBC/f39/XX9/f0G/f0AM2wDKDZBEiADYBpAx99xekv9Bx5RG/39DAgW/RNN/ThR/dAm/Rz9CzH9JCj9QP0gUgwU/TgxSB79Fv0DUP0mUBAU/f39/QD9nzFc/f0dHFb9/TNQ/WT9/RFmcDD9/QcjEDsC/f0HbBkdZCD9eXQC/Sj9/f0I/RoKSnv9HP39Pj5AA3shEAME/TMcBSUIP0AvEP0NAwgwAP1P/VUse/05AAAAAElFTkT9QmD9

I try also the soultions here: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data without convert to base-64 and with 'arrayBuffer' and 'Blob' objects but the picture didn't show . 我在这里也尝试了以下方法: https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data无需转换为base-64并带有'arrayBuffer'和'Blob'对象,但是图片没有不显示。 The only way the picture show it's when I convert to a correct base-64 and then create arraybuffer and initialize Blob with him . 图片显示的唯一方法是当我转换为正确的base-64,然后创建arraybuffer并与他初始化Blob时。 But the problem is the same - I cant convert my data to correct base-64. 但是问题是一样的-我无法将数据转换为正确的base-64。

can anyone save me please ?? 谁能救我?

Thanks ! 谢谢 !

Here is the link to this small library that is meant can be useful for u. 这是这个小图书馆的链接,对您很有用。 It can convert base64 to binary and vice versa. 它可以将base64转换为二进制,反之亦然。

My problem is solved . 我的问题解决了。 I use dropzone plugin to get the response from server and because of this I get binary data as a text reponse and it make my problems. 我使用dropzone插件从服务器获取响应,由于这个原因,我将二进制数据作为文本响应获取,这引起了我的问题。 I just go to dropzone.js and change 2 minor things to get the response in type of arraybuffer : 我只是去dropzone.js并更改2处次要的东西以获得arraybuffer类型的响应:

        xhr.responseType = 'arraybuffer'; ( line 1246)

This is new line to get the response in type of arrayBuffer, and then create a Blob object from the arraybuffer response . 这是新行,用于获取arrayBuffer类型的响应,然后根据arraybuffer response创建一个Blob对象。

          response = xhr.response; (line 1305 ) 

Change it to get response inseted TextRrsponse.. 对其进行更改以使响应插入TextRrsponse。

I hope that it will help somebody... Thanks everyone ! 我希望它会对某人有所帮助...谢谢大家!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM