2016-08-14 2 views
0

Загрузите два файла blob в JavaScript, используя приведенный ниже код.Как сравнить два капли в JavaScript?

Я хочу сравнить их, чтобы убедиться, что они точно такие же.

(blob1 === blob2) возвращает false, хотя сообщаемый размер каждого блока составляет 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

Я думаю, вам нужно прочитать «blob», если вы хотите сравнить его содержимое (используя FileReader). Не было бы проще установить responseType для «arraybuffer», особенно если они настолько малы? – Thilo

+0

Если вы посмотрите на мой код, вы увидите, что он использует filereader для вывода текста из блоба, но это не относится к точке, для сравнения двух blobs не требуется чтение. –

+0

@ DukeDugal: Почему чтение не нужно было бы сравнивать два капли? Как еще вы хотите сравнить их, если не по их содержанию? – Thilo

ответ

0

К сожалению, это случай сравнения двух совершенно независимых указателей, которые ссылаются на сопоставимый контент. Чтобы увидеть, как это может работать для более простого содержания, попробуйте выполнить следующие действия в консоли JavaScript:

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

Возвращает ложь. Разочарование того, что 5 как объект не равно объекту, значение которого равно 5. Но по крайней мере это ставит Blob в контекст.

Я столкнулся с этой же проблемой и согласен с предыдущим предложением о том, что FileReader является единственным вариантом.

0

Вы должны использовать FileReader, чтобы сравнить их

Документов находятся на MOZILLA MDN fileReaders. Взгляните на методы, чтобы выбрать лучшее для ваших данных.

Бесполезный способ сравнения его взгляда на их размер, но может быть запутанным, поскольку new Blob([Math.random()]).size == new Blob([Math.random()]).size вернется true.

Смежные вопросы