Читайте readAsBinaryString в IE11 - PullRequest
       8

Читайте readAsBinaryString в IE11

0 голосов
/ 03 сентября 2018

Попытка прочитать двоичный файл как строку в IE10 / 11, и это не удается. Работает в Chrome. Пробовал разные IE-исправления, но безуспешно. Кажется, самая большая проблема в том, что я не могу найти результат. Выдает ошибку в angular / cli ":" 1.6.5 ".

e.target.result возвращает ноль и не принимается в компиляторе

         FileReader.prototype.readAsBinaryString = function(blb) {
      const that = this;
      const conversor = function (e) {
          const toConvert = e.target.result || '';
          let binary = '';
          const bytes = new Uint8Array(toConvert);

reader.result возвращает null и не принимается в компиляторе

  if (FileReader.prototype.readAsBinaryString === undefined) {
      FileReader.prototype.readAsBinaryString = function (fileData) {
        let binary = '';
        const pt = this;
        reader.onload = function (e) {
          const bytes = new Uint8Array(reader.result);
          const length = bytes.byteLength;
          for (let i = 0; i < length; i++) {
            binary += String.fromCharCode(bytes[i]);
          }
          const fl = {target: {result: binary}};
          pt.onload(fl);
        };
        reader.readAsArrayBuffer(fileData);
      };
    }

Попытался разобрать, компилятору это нравится, но не работает.

     const r: any = reader;
      const t: any = e.target;
      let data;
      if (!e) {
          data = r.content;
       } else {
         data = t.result;
      }

Есть идеи?

Функция JavaScript readAsBinaryString для E11

1 Ответ

0 голосов
/ 11 сентября 2018

Я нашел решение объединения для Chrome и IE методом проб и ошибок.

  this.sharepointService.getFile(this.sharepointService.siteUrl + 'Templates/' + template.fileLeafRef).subscribe(f => {
    const reader = new FileReader();
    let binary = '';
    if (FileReader.prototype.readAsBinaryString === undefined) {
      FileReader.prototype.readAsBinaryString = function (fileData) {
        const pt = this;
        reader.onload = function (e) {
          let  ia = null;
          let length = 0;
          if (e) {
            ia = new Uint8Array(e.target['result']);
            length = ia.length;
          }
          for (let i = 0; i < length; i++) {
            binary += String.fromCharCode(ia[i]);
          }
        };

       reader.readAsArrayBuffer(fileData);
      };
    }

    reader.readAsBinaryString(f);

    reader.onloadend = () => {

        let base64data;
        if ( binary === '') {
          base64data = reader.result;
        } else {
          base64data = binary.toString();
        }
...