javascript - 如何比较 JavaScript 中的两个 blob?

标签 javascript xmlhttprequest xmlhttprequest-level2

我使用下面的代码在 JavaScript 中加载了两个 blob 文件。

我想比较它们,看看它们是否完全相同。

(blob1 === blob2) 返回 false,即使每个 blob 的报告大小为 574 字节。我做错了什么?

  getHTTPAsBlob(url, callback) {
    let cacheBust = Math.random().toString()
    url = url + '?&cachebust=' + cacheBust
    let xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'blob';
    xhr.onload = function (e) {
      if (xhr.status == 200) {
        // get binary data as a response
        let fileData = this.response;
        let contentType = xhr.getResponseHeader("content-type")
        var reader = new FileReader()
        reader.onload = (e) => {
          console.log(reader.result)
          console.log(fileData)
          callback(null, {
              Body: reader.result,
              Blob: fileData,
              ContentType: contentType,
              Etag: null,
              LastModified: null,
            })
        }
        reader.readAsText(fileData)
        } else {
        callback(xhr)
      }
      }
      xhr.send();
    }

最佳答案

你必须使用 FileReader 来比较它们

FileReader 的文档在MDN .查看选择最适合您的数据的方法。

比较两个 blob 的一种无用的方法是查看它们的大小。尽管两个相同大小的 blob 无论其内容如何都会返回 true。

例子

new Blob([Math.random()]).size == new Blob([Math.random()]).size//true.

关于javascript - 如何比较 JavaScript 中的两个 blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38940976/

相关文章:

javascript - JS ProgressEvent 仅在完成时触发

javascript - XMLHttpRequest.upload 进度事件仅适用于 IE

php - 在 xmlHTTPrequest send() 之后从 PHP $_POST 访问 ArrayBuffer

javascript - Discord.js 仅使用 id 管理角色

asp.net-mvc - 如何区分从 RenderAction 发出的请求和通过 AJAX 发出的请求?

javascript - Meteor 应用程序无法运行 - 对象 #<Compiler> 没有方法 'host'

javascript - 我如何知道 XHR 已使用 readState 发送到服务器?

javascript - Phantom JS 同步 AJAX 请求 : NETWORK_ERR: XMLHttpRequest Exception 101

javascript - 有没有办法让用户在上传到服务器之前查看他们要上传客户端的图像?

javascript - Vaadin 12 将对象传递给 JavaScript 函数 : Can't encode class