2016-08-14 3 views
0

Ich lade zwei Blob-Dateien in JavaScript mit dem folgenden Code.Wie zwei Blobs in JavaScript zu vergleichen?

Ich möchte sie vergleichen, um zu sehen, ob sie genau gleich sind.

(blob1 === blob2) gibt false zurück, obwohl die gemeldete Größe jedes Blobs 574 Byte beträgt. Was mache ich falsch?

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

Ich denke, Sie müssen den "Blob" lesen, wenn Sie seinen Inhalt vergleichen möchten (mit FileReader). Wäre es nicht einfacher, responseType auf "arraybuffer" zu setzen, besonders wenn sie so klein sind? – Thilo

+0

Wenn Sie sich meinen Code ansehen, sehen Sie, dass er filereader verwendet, um den Text aus dem Blob zu holen, aber das ist neben dem Punkt, das Lesen sollte nicht benötigt werden, um zwei Blobs zu vergleichen. –

+0

@DukeDugal: Warum sollte Lesen nicht benötigt werden, um zwei Blobs zu vergleichen? Wie sonst wollen Sie sie vergleichen, wenn nicht durch ihre Inhalte? – Thilo

Antwort

0

Leider ist dies ein Fall des Vergleichens zweier völlig unabhängiger Zeiger, die auf vergleichbaren Inhalt verweisen. Um zu sehen, wie dies könnte für einfacheren Inhalt arbeitet, versuchen Sie Folgendes in der JavaScript-Konsole:

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

FALSCH. Frustrierend, dass 5 als ein Objekt nicht gleich einem Objekt ist, dessen Wert 5 ist. Aber zumindest bringt dies Blob in Zusammenhang.

Ich renne in das gleiche Problem und stimme dem vorherigen Vorschlag zu, dass FileReader die einzige Option ist.

0

Sie müssen einen Filereader benutzen sie fileReaders

Die Dokumente sind auf mozilla MDN zu vergleichen. Sehen Sie sich Methoden an, um das Beste für Ihre Daten auszuwählen.

Eine nutzlose Art zu vergleichen ist ihre Größe zu betrachten, aber es kann verwirrend sein, da new Blob([Math.random()]).size == new Blob([Math.random()]).sizetrue zurückgibt.