Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较JavaScript中的两个blob?_Javascript_Xmlhttprequest_Xmlhttprequest Level2 - Fatal编程技术网

如何比较JavaScript中的两个blob?

如何比较JavaScript中的两个blob?,javascript,xmlhttprequest,xmlhttprequest-level2,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 XMLHttpR

我使用下面的代码在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();
    }

不幸的是,这是比较引用可比较内容的两个完全独立的指针的情况。要了解这如何适用于更简单的内容,请在javascript控制台中尝试以下操作:

新号码(5)=新号码(5)

返回false。令人沮丧的是,5作为一个对象并不等于一个值为5的对象。但至少这将Blob置于上下文中

我遇到了同样的问题,并且同意前面的建议,即FileReader是唯一的选项。

您必须使用FileReader来比较它们 的文档位于上。请看一下选择最适合您的数据的方法

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

例子
newblob([Math.random()])。size==newblob([Math.random()])。size//true

我认为“Blob compare”插件将对您有所帮助。 它可以比较blob的大小、类型等。


但是我不知道这个插件是否是一种完美的方式。

如果你想比较它的内容(使用FileReader),我认为你必须阅读“blob”。将responseType设置为“arraybuffer”不是更容易吗,特别是如果它们太小的话?如果你看我的代码,你会发现它使用filereader从blob中提取文本,但这不是重点,比较两个blob不需要读取。@DukeDugal:为什么不需要读取来比较两个blob?如果不是根据内容,您还想如何比较它们?