Загрузка base64 pdf в Safari - PullRequest
       5

Загрузка base64 pdf в Safari

0 голосов
/ 21 января 2019

У меня есть вызов POST, который возвращает файл base64 PDF.Когда я вызываю эту конечную точку, я конвертирую ее в Blob, а затем загружаю.Это прекрасно работает во всех браузерах, кроме Safari.

openPdf = () => {

  const sendObj = {
    fakeValue: 'test'
  };

  axios.post('https://fakeendpoint.com/create-pdf', sendObj)                
    .then((res) => {
      const base64URL = res.data;
      const binary = atob(base64URL.replace(/\s/g, ''));
      const len = binary.length;
      const buffer = new ArrayBuffer(len);
      const view = new Uint8Array(buffer);

      for (let i = 0; i < len; i += 1) {
        view[i] = binary.charCodeAt(i);
      }

      // create the blob object with content-type "application/pdf"
      const blob = new Blob([view], { type: 'application/pdf' });
      const url = URL.createObjectURL(blob);

      const a = document.createElement('a');
      document.body.appendChild(a);
      a.style = 'display: none';
      a.href = url;
      a.download = 'Test.pdf';
      a.target = '_blank';
      a.click();
  });
}

Как мне заставить это работать в Safari?

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

из теста, который я сделал - это происходит, только когда PDF слишком велик.(и только в мобильном Safari) Я предполагаю, что это связано с длиной URL.

Единственный недостаток удаления target="_blank" заключается в том, что если пользователь нажмет «назад», он потеряет предыдущее состояние страницы..

0 голосов
/ 21 января 2019

Похоже, Safari не соответствует стандартам для тега a.Я считаю, этот предыдущий пост SO определяет основную причину.Из комментариев в связанном ответе:

Обратите внимание, что указание целевого атрибута в Safari, по-видимому, переопределяет атрибут загрузки (это не так в Chrome, Firefox или Opera).

Попробуйте удалить a.target = '_blank' из приведенного выше кода, а затем протестируйте его.Он должен работать!

К сожалению, я не уверен, как бы вы открыли его в новой вкладке с этим изменением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...