2016-08-14 4 views
0

아래 코드를 사용하여 JavaScript에 두 개의 blob 파일을로드합니다.JavaScript에서 두 개의 얼룩을 비교하는 방법은 무엇입니까?

나는 그것들이 정확히 동일한 지 비교하기 위해 비교하기를 원합니다.

(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"을 읽어야한다고 생각합니다. 특히 "arraybuffer"에 responseType을 설정하는 것이 더 쉽지 않을까요? – Thilo

+0

내 코드를 보면 blob에서 텍스트를 가져 오는 데 filereader를 사용하지만 두 점을 비교할 때 읽기가 필요하지는 않습니다. –

+0

@DukeDugal : 왜 두 개의 얼룩을 비교할 때 읽기가 필요하지 않습니까? 그 내용이 아닌 다른 방법은 무엇입니까? – Thilo

답변

0

불행히도, 이것은 비교 가능한 내용을 참조하는 두 개의 완전히 독립적 인 포인터를 비교하는 경우입니다. 이 간단한 콘텐츠를 작동하는 방법을 확인하려면 자바 스크립트 콘솔에서 다음을 수행하십시오

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

false를 돌려줍니다. 5를 객체로 좌절시키는 것은 값이 5 인 객체와 같지 않습니다.하지만 적어도 이것은 Blob을 문맥에 둡니다.

나는이 동일한 문제를 겪고 있으며 FileReader가 유일한 옵션이라는 이전 제안에 동의합니다.

0

당신은 그들

워드 프로세서는 모질라 MDN fileReaders에있는 비교할 파일 리더를 사용해야합니다. 데이터에 가장 적합한 방법을 선택하는 방법을 살펴보십시오.

쓸모없는 방법으로 크기를보고 있지만 new Blob([Math.random()]).size == new Blob([Math.random()]).size으로 반환하므로 혼란 스러울 수 있습니다.

관련 문제