2016-08-14 80 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將返回真正