В настоящее время я работаю над решением проблемы загрузки с использованием 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 (название «документ» и без расширения):
Пример печати