2016-08-14 87 views
0

我使用下面的代码在JavaScript中加载两个blob文件。如何比较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(); 
    } 
+2

我认为如果你想比较它的内容(使用FileReader),你必须阅读“blob”。将responseType设置为“arraybuffer”不是更容易吗,特别是如果它们太小? – Thilo

+0

如果你看看我的代码,你会看到它使用filereader从文本中获取文本,但是这并不重要,阅读应该不需要比较两个blob。 –

+0

@DukeDugal:为什么阅读不需要比较两个斑点?你还想怎么比较他们,如果不是他们的内容? – Thilo

回答

0

不幸的是,这是比较引用可比内容两个完全独立的指针的情况。怎么看,这可能更简单的内容工作,尝试在JavaScript控制台以下:

new Number(5) == new Number(5)

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

我遇到了同样的问题,并同意以前的建议FileReader是唯一的选择。

0

必须使用的FileReader对它们进行比较

的文档是在Mozilla MDN fileReaders。看看为数据选择最好的方法。

比较它的无用的方法是观察其大小,但它可能会造成混淆的new Blob([Math.random()]).size == new Blob([Math.random()]).size将返回真正