当前位置: 首页 > 面试题库 >

从XHR请求获取BLOB数据

公孙河
2023-03-14
问题内容
var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://static.reddit.com/reddit.com.header.png', true);

    xhr.responseType = 'arraybuffer';

    xhr.onload = function(e) {
      if (this.status == 200) {
        var uInt8Array = new Uint8Array(this.response);
        var byte3 = uInt8Array[4]; 

        var bb = new WebKitBlobBuilder();
        bb.append(xhr.response);
        var blob = bb.getBlob('image/png'); 
        var base64 = window.btoa(blob);
        alert(base64);

      }
    };

    xhr.send();

基本上,我在这里尝试做的是检索图像并将其转换为base64。

通过阅读此处的评论,它指出:

“当然。在将资源作为ArrayBuffer提取后,从中创建一个blob。一旦有了它,就可以直接对base / blob
window.btoa()或进行base64编码 FileReader.readAsDataURL()。”

但是,blob只是[object blob],而我需要从图像中获取二进制文件,以便可以将其转换为base64并使用数据将其显示在img标签中。

有人知道如何实现这一目标吗?

先感谢您!


问题答案:

不要在Chrome中使用BlobBuilder(在OSX Chrome,Firefox 12,Safari 6,iOS Chrome,iOS
Safari中测试过):

var xhr = new XMLHttpRequest();
xhr.open('GET', 'doodle.png', true);

xhr.responseType = 'arraybuffer';

// Process the response when the request is ready.
xhr.onload = function(e) {
  if (this.status == 200) {
    // Create a binary string from the returned data, then encode it as a data URL.
    var uInt8Array = new Uint8Array(this.response);
    var i = uInt8Array.length;
    var binaryString = new Array(i);
    while (i--)
    {
      binaryString[i] = String.fromCharCode(uInt8Array[i]);
    }
    var data = binaryString.join('');

    var base64 = window.btoa(data);

    document.getElementById("myImage").src="data:image/png;base64," + base64;
  }
};

xhr.send();

注意此代码已超过7年的历史了。
尽管它仍然可以在大多数浏览器中正常运行,但这是基于@TypeError的建议的更新版本,该建议仅适用于更现代的浏览器 ,但iOS
Safari可能会例外
(可能支持或可能不支持responseType = 'blob'-请确保进行测试!):

var xhr = new XMLHttpRequest();
xhr.open('get', 'doodle.png', true);

// Load the data directly as a Blob.
xhr.responseType = 'blob';

xhr.onload = () => {
  document.querySelector('#myimage').src = URL.createObjectURL(this.response);
};

xhr.send();


 类似资料:
  • 原理 对于POST请求的处理,koa2没有封装获取参数的方法,需要通过解析上下文context中的原生node.js请求对象req,将POST表单数据解析成query string(例如:a=1&b=2&c=3),再将query string 解析成JSON格式(例如:{"a":"1", "b":"2", "c":"3"}) 注意:ctx.request是context经过封装的请求对象,ctx.

  • 使用方法 在koa中,获取GET请求数据源头是koa中request对象中的query方法或querystring方法,query返回是格式化好的参数对象,querystring返回的是请求字符串,由于ctx对request的API有直接引用的方式,所以获取GET请求数据有两个途径。 1.是从上下文中直接获取 请求对象ctx.query,返回如 { a:1, b:2 } 请求字符串 ctx.que

  • 问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):

  • 我尝试做的是从同一个站点发布数据并从它创建一个新的订单(当提交按钮被点击时)。我没有任何信息在我的请求。身体,我怀疑是在我的ejs出了问题,任何反馈是非常感谢的。 我的ejs文件: 和我的js文件:

  • 我从jquery发送如下请求: 在servlet内部,我可以获得参数,但问题是参数包含序列化的表单数据:如下所示: 我知道我可以使用来获取数据,但我想确保--如果他们的方法简单与否?

  • 3.1 GET请求数据获取 3.2 POST请求数据获取 3.3 koa-bodyparser中间件