Загрузить pdf Chrome Ios - PullRequest
       17

Загрузить pdf Chrome Ios

0 голосов
/ 23 апреля 2020

В настоящее время я работаю над решением проблемы загрузки с использованием javascript (Vue) для браузеров IOS Safari и Chrome. В Safari он работает на 100%, однако в Chrome IOS при загрузке или если файл не содержит нужного мне имени, может ли кто-нибудь помочь мне решить эту проблему?

Запрос:

export const receiptDownload = receiptHash => {
  return http.get(
    `/download-receipt/${receiptHash}`,
    {
      responseType: 'arraybuffer',
      headers: {'Content-Type': 'application/pdf', 'Content-Disposition': 'Attachment; filename=\"receipt.pdf\"'},
      data: {} // https://github.com/mzabriskie/axios/issues/86
    }
  ).then(response => {
    return new Blob([response.data], { type: 'application/pdf' }) // eslint-disable-line no-undef
  })
}

Запрос вызова:

this.receiptDownload(receiptHash).then(blob => {
    this.downloadBlob(blob, 'receipt.pdf')
}).catch(() => {
   //show erro
}).finally(() => {
   //close the loading         
})

Функция загрузки:

export const downloadBlobMixin = {
  methods: {
    isIos () {
      return /(iPad|iPhone|iPod).*WebKit/.test(window.navigator.userAgent)
    },
    downloadBlob (blob, filename) {
      if (this.isIos()) {
        const reader = new FileReader()
        reader.fileName = filename
        reader.typeFile = blob.type
        reader.onload = e => {
          const url = e.target.result
          this.createLinkDownload(url, filename)
        }
        reader.readAsDataURL(blob)
        return
      }
      const url = window.URL.createObjectURL(blob)
      this.createLinkDownload(url, filename)
    },
    createLinkDownload (url, filename) {
      const link = document.createElement('a')
      link.href = url
      link.download = filename
      document.body.appendChild(link)
      link.click()
      window.URL.revokeObjectURL(url)
      setTimeout(() => {
        // For Firefox it is necessary to delay revoking the ObjectURL
        document.body.removeChild(link);
        window.URL.revokeObjectURL(url);
      }, 100)
    }
  }
}

Загрузка примера на Chrome IOS (название «документ» и без расширения):

Пример печати

...