2016-08-14 6 views
0

JavaScriptで2つのBLOBファイルをロードするには、以下のコードを使用します。JavaScriptで2つのブロブを比較するにはどうすればよいですか?

私はそれらを正確に同じであるかどうか見るために比較したいと思います。

(blob1 === blob2)は、報告された各BLOBのサイズが574バイトであっても、falseを返します。私は間違って何をしていますか?

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

私のコードを見ると、ファイルリーダを使ってBLOBのテキストを取得するのがわかりますが、それはポイントの横にあり、2つのBLOBを比較するためには読み込みは必要ありません。 –

+0

@DukeDugal:2つのブロブを比較するために読み込みが必要ないのはなぜですか?その内容ではないにもかかわらず、他にどのように比較したいですか? – Thilo

答えて

0

残念ながら、これは、同等の内容を参照する2つの完全に独立したポインタを比較する場合です。これは単純なコンテンツのために働くかもしれない方法を参照するには、JavaScriptコンソールで次の操作を試してください。

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

falseを返します

。 5をオブジェクトとして挫折させることは、値が5のオブジェクトと等しくはありません。しかし、少なくともこれはBlobを文脈に置きます。

私はこの同じ問題を抱えており、FileReaderが唯一のオプションであるという前の提案に同意しています。

0

あなたは

ドキュメントはMozillaのMDN fileReadersにあり、それらを比較するためにFileReaderのを使用する必要があります。データに最適な方法を選択してください。

比較すると無駄な方法ですが、new Blob([Math.random()]).size == new Blob([Math.random()]).size真のを返すので、混乱する可能性があります。

関連する問題