Angular 5. Javascript FileReader не работает в Safari, но работает в Chrome и Firefox - PullRequest
0 голосов
/ 07 мая 2018

Уважаемые, я работаю с проектом на основе Angular 5, где мне нужно отобразить изображение (в качестве источника используется кодировка base64) с помощью объекта FileReader. Он отлично работает в Chrome и Firefox, но не работает в Safari (как в Ipad, так и в Iphone).

Это мой код, который я нашел в Pipe:

httpClient.get(url, {headers: headers, responseType: "blob"})
  .switchMap(blob => {

    let imageBlob = new Blob([blob], {type: 'image/png'});

    return Observable.create(observer => {

      const reader = new FileReader();
      reader.readAsDataURL(imageBlob);
      reader.onloadend = ()=>{

        let securedPath = this.sanitizer.bypassSecurityTrustResourceUrl(reader.result);
        observer.next(securedPath); // emit the base64 string result

      }

      if(download){

        this.helperService.downloadFile(download, blob);
      }

    });
  });

Я нашел несколько источников, которые рекомендуют проверить, существует ли FileReader в браузере и, если нет, обработать соответствующим образом, например:

 if(FileReader) {   //returns true in Safari.

    alert("The browser SUPPORTS FileReader");
 } else {

   alert("The browser doesn't support the FileReader Object, so do this ");
}

Проблема в том, что проверка возвращает true, а typeof FileReader возвращает function, поэтому версия моего браузера Safari (9.0) уже поддерживает объект FileReader.

Более того, когда я проверяю длину кодировки base64, она всегда показывает 5, а источник сокращается до data:.. в Safari. Остальное удаляется в Safari.

Буду очень признателен, если кто-нибудь поможет мне решить эту проблему. Спасибо!

...