2014-10-23 4 views
2

너무 큰 배열을 나는 다음과 같은 유틸리티가 있습니다IE9 - 바이너리에 DataURI - .atob, Uint8Array 및 ArrayBuffer에 대한 Polyfills - polyfill

 // Utility function to remove base64 URL prefix and store base64-encoded string in a Uint8Array 
     // Courtesy: https://gist.github.com/borismus/1032746 
     function convertDataURIToBinary(dataURI) { 
      var BASE64_MARKER = ';base64,'; 
      var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; 
      var base64 = dataURI.substring(base64Index); 
      var raw = window.atob(base64); 
      var rawLength = raw.length; 
      var array = new Uint8Array(new ArrayBuffer(rawLength)); 

      for (i = 0; i < rawLength; i++) { 
       array[i] = raw.charCodeAt(i); 
      } 
      return array; 
     } 

I는 다음과 같이 사용

 // Read the binary contents of the base 64 data URL into a Uint8Array 
     // Append the contents of this array to the SP.FileCreationInformation 
     var arr = convertDataURIToBinary(convertedDataURI); 
     for (var i = 0; i < arr.length; ++i) { 
      fileCreateInfo.get_content().append(arr[i]); 
     } 

로를 파일 업로드를 준비하십시오.

그것이 IE9에서 작동하려면 나는 다음 polyfills 사용 :

나는 매우 유용 예외가 Uint8Array :

SCRIPT5022 : throw 된 예외 및 catch되지 않은 예외 0

if (obj.length > MAX_ARRAY_LENGTH) throw RangeError('Array too large for polyfill'); 

내 객체가 1085798length 가지고 MAX_ARRAY_LENGTH100000 같다 :

은 디버깅 후 나는 문제를 발견했다. 나는이 가치를 바꿀 수 있었지만 나는 그것이 그 이유를 추측한다.

누구든지 더 좋은 방법을 알고 있습니까?

답변

1

글쎄, 나는 대답을 얻었다.

난 그냥 브라우저 인해 큰 배열 그러나 약간은 (아마도 좀 더) 초는 정지 해제 및 업로드가 완료된 후 정지 것으로,

MAX_ARRAY_LENGTH = 2000000; //value that is higher than the expected array.length (may I should just remove the check) 

결과가 설정합니다.

MAX_ARRAY_LENGTH은 사용하는 동안 약간의 속도를 유지하는 데 사용됩니다.