代码之家  ›  专栏  ›  技术社区  ›  Nuri Engin

如何从XHR请求响应字符串转换/解码base64

  •  0
  • Nuri Engin  · 技术社区  · 6 年前

    我一直面临着正确转换XHR请求响应的问题。我在Stackoverflow和其他一些平台上读过一些解决方案,但是无法成功地将字符串转换为dataURL。

    我试着把字符串转换成 atob() btoa() 上提到的方法 MDN 还有这个 Stackoverflow +我一直在寻找解决办法,但没有一种方法能帮我解决问题。

    image src ?

    XHR请求响应:

        "�PNG
    
    
    IHDR��  m"H3PLTE���������������������������������������������������?�U�iIDATx�흋�� Eۈ�Z����R�[���BB�]�_�Y�� x��a�a�a�a�a�a�a�a��-��nFI]]�}_x�}�����$ʆ�h�s�_4M_w�WI��*��.o���"��~۔�C^uڟ�P5W�'�[��(��}�=)���U�����Z�J#U��G�'�8G�߻ۓH�>��E���G�>݁K�ތ4l��C��
    v�xu���?�*R��^������ł�B[�Y׸kkY����=�
    
    l|H�s7Yp"���+6zV�cvSj+�
    �}�c�c݄Pކ
    ~�W�N֨(�3����0[QƄ�Q�)o�_R,�]J����G�b��?��M  9�  w*h��!=�%"�4������˔*a��
    
    ���6��w'��>��el3�e�l����c�ݍ(U.p�Q2�э����#��BɺB�h�4Sh��I�
    �s��B���P735���(L�KU_�����s��v�]~�������6�+
    /��iD���    �����uԏf�ﳽ�}nA�1_7��t�
    +m�2W���P:�8�N�.Ԉ}�KQ�`�G0�P�Y�}�=A|�$� ��Xǭ�؅)w���>����m�J�R�֖��~}�n�@�G��7�ͽ���d������58C��i�6|�&�ۄ?pIl:P�l   *FE�
    q��wj��v��6�.�BQ�߁�����GBm�{�(�
    �!f�k�Df*?}�+�N��"u��V,N��.eҚj��r�t��А�r��>)��*a��J����4�U���L��Z�/�ҵ���e=�;Qp����=x�[5=N��:8O}��k�?�Rr"�ma��tڱQ�I���R���=ܣU�MI�3Y�6\�~�v�.yJ�)��q�&���/�_�R�A-����{Ҡ�$��RNx%�}'�D�Tm�d9��}�n��~�kz��Ӝ���K� b��] L|�iqo3�O��p��l��  'd�$�D�!:e��F=����'�"7g�F=b��7+Qܤ֩n�_"��c�����w$~`�V�"��I�{�&R̰G�O�|��%�    ��/�L���>�  �wb�S����- �3O����*J��7�͈�
    �m�JL�Fdҗ��0��>���0��<����0�I!�33,y
    d>3Ò�<y��)�'�pxS�E����;�����)�2�p��Dt��P�*�����Y�.�܈�
    ��D�5�Y�Ld����l��cb�lQ�|4�DED�͒�n
    ^3��&F!|��D��?�'��q
    G�jN�h�\�   2ODVu�d���'���LLs_�ۏ�>CV�   �gQ�{���e�  
    ���2��*�Q�>|y��fg�M9a��E�IEND�B`�"
    

    :

    我已经通过这篇文章成功地渲染了图像@ https://stackoverflow.com/a/8022521/7163711

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sébastien Renauld    6 年前

    你的XHR数据是 png 文件,如预期。为了向您展示如何正确地嵌入它,我冒昧地生成了一个“更好”的PNG-一个10x10的黄色正方形。它是base64编码的 b64data yourData 就像你从XHR得到的一样。

    var b64data = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFklEQVR42mP8/5/hDAMRgHFUIX0VAgBfZRvvtreybgAAAABJRU5ErkJggg==";
    
    // Assuming your data is a raw PNG
    var yourData = atob(b64data);
    
    // We convert...
    var btoa_data = btoa(yourData);
    
    var elem = document.createElement("img");
    elem.src = "data:image/png;base64,"+btoa_data;
    document.getElementById("app").append(elem);
    console.log(atob(b64data));
    <div id="app"></div>

    如你所见, btoa() 以base64编码数据;在此之后,您只需在 src

    • 它是一个PNG(如果不是,或者如果你不确定它是否会是,你需要检查你的回复的前几个字节)
    • 它是base64编码的