How to parse into base64 string the binary image from response?

后端 未结 6 1187
广开言路
广开言路 2020-11-30 02:49

I want to parse the requested image from my REST API into base64 string.

\"enter

相关标签:
6条回答
  • 2020-11-30 02:55

    Base 64 Image data is worked for me like

    <img src="data:image/png;base64,' + responce + '" />

    0 讨论(0)
  • 2020-11-30 02:56

    I think part of the problem you're hitting is that jQuery.ajax does not natively support XHR2 blob/arraybuffer types which can nicely handle binary data (see Reading binary files using jQuery.ajax).

    If you use a native XHR object with xhr.responseType = 'arraybuffer', then read the response array and convert it to Base64, you'll get what you want.

    Here's a solution that works for me:

    // http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
    function fetchBlob(uri, callback) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET', uri, true);
      xhr.responseType = 'arraybuffer';
    
      xhr.onload = function(e) {
        if (this.status == 200) {
          var blob = this.response;
          if (callback) {
            callback(blob);
          }
        }
      };
      xhr.send();
    };
    
    fetchBlob('https://i.imgur.com/uUGeiSFb.jpg', function(blob) {
      // Array buffer to Base64:
      var str = btoa(String.fromCharCode.apply(null, new Uint8Array(blob)));
    
      console.log(str);
      // Or: '<img src="data:image/jpeg;base64,' + str + '">'
    });

    https://jsfiddle.net/oy1pk8r3/2/

    Produces base64 encoded console output: /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQIBAQICAgICAgICAw.....

    0 讨论(0)
  • 2020-11-30 03:01

    Im guessing to use escape on the string before you pass it to the function, without the API call I can't test myself.

    test

    encodeURI("testñ$☺PNW¢=")
    

    returns

    "test%C3%B1$%E2%98%BAPNW%C2%A2="
    

    It just escapes all the characters, it should escape all the illegal characters in the string

    test

    encodeURI("¶!┼Æê‼_ðÄÄ┘Ì+\+,o▬MBc§yþó÷ö")
    

    returns

    "%C2%B6!%E2%94%BC%C3%86%C3%AA%E2%80%BC_%C3%B0%C3%84%C3%84%E2%94%98%C3%8C++,o%E2%96%ACMBc%C2%A7y%C3%BE%C3%B3%C3%B7%C3%B6"
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

    0 讨论(0)
  • 2020-11-30 03:07

    Try this on its working well. please try once. @user2402179

      $.ajax({
        type: 'GET',
        url: baseUrl",
        dataType: 'binary',
        xhr() {
          let myXhr = jQuery.ajaxSettings.xhr();
          myXhr.responseType = 'blob';
          return myXhr;
        },
        headers: {'Authorization': 'Bearer '+token}      
        
    }).then((response) => {
        // response is a Blob
        return new Promise((resolve, reject) => {
          let reader = new FileReader();
          reader.addEventListener('load', () => {
            $('#theDiv').append('<img src="' +reader.result+ '" />')
            resolve(reader.result);
          }, false);
          reader.addEventListener('error', () => {
            reject(reader.error);
          }, false);
          reader.readAsDataURL(response);
        });
      });
    
    0 讨论(0)
  • 2020-11-30 03:18

    instead of looping through the blob with _arrayBufferToBase64(), use apply() to do the conversion, it's 30 times faster in my browser and is more concise

    // http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
    function fetchBlob(uri, callback) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET', uri, true);
      xhr.responseType = 'arraybuffer';
    
      xhr.onload = function(e) {
        if (this.status == 200) {
          var blob = this.response;
          if (callback) {
            callback(blob);
          }
        }
      };
      xhr.send();
    };
    
    fetchBlob('https://i.imgur.com/uUGeiSFb.jpg', function(blob) {
      var str = String.fromCharCode.apply(null, new Uint8Array(blob));
      console.log(str);
      // the base64 data: image is then
      // '<img src="data:image/jpeg;base64,' + btoa(str) + '" />'	
    });

    0 讨论(0)
  • 2020-11-30 03:20

    The issue you're encountering is that the response is being considered a Unicode String. See the section on Unicode Strings here: window.btoa

    Several solutions are offered in this post

    0 讨论(0)
提交回复
热议问题