- 废话少说直接上代码 这边利用ajax和blob 模拟下载
// 前提如果报 跨域的错 请联调后端解决跨域问题
/**
* post 下载通用方法
* @param {string} url 请求地址
* @param {object} data 请求体
* @param {string} filename 文件名称 如果不传会根据后端的Content-Disposition信息来组织 但前提后端要暴露这个头部信息 否则会出现 refuse的情况
* @param {function} callback // 回调
*/
export function downloadFile(url, data, filename, callback) {
const xhr = new XMLHttpRequest()
xhr.open('POST', url, true)
xhr.responseType = 'blob'
xhr.onload = ev => {
const currentTarget = ev.currentTarget || {}
if (currentTarget.status === 200 && currentTarget.readyState === 4) {
if (!filename) {
// 从头部信息解析出 文件名称 这边可能会报错 unsafe refuse 的错 这是后端没有暴露此请求头
const disposition = xhr.getResponseHeader('Content-Disposition')
if (disposition && disposition.indexOf('attachment') !== -1) {
const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/
const matches = filenameRegex.exec(disposition)
if (matches != null && matches[1])
filename = matches[1].replace(/['"]/g, '')
}
}
const type = xhr.getResponseHeader('Content-Type')
const blob = new Blob([currentTarget.response], { type: type })
// 针对一些不同浏览器进行一些兼容操作 下载
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, filename)
} else {
const URL = window.URL || window.webkitURL
const downloadUrl = URL.createObjectURL(blob)
if (filename) {
const a = document.createElement('a')
if (!a.download) {
window.location = downloadUrl
} else {
a.href = downloadUrl
a.download = filename
document.body.appendChild(a)
a.click()
}
} else {
window.location = downloadUrl
}
setTimeout(() => {
URL.revokeObjectURL(downloadUrl)
}, 100) // 释放资源
}
}
callback && callback()
}
/** 如果需要一些头部信息在此处添加 */
xhr.setRequestHeader('Content-type', 'application/json')
xhr.send(JSON.stringify(data))
}
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
- 找不到素材资源介绍文章里的示例图片?
- 对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
- 模板不会安装或需要功能定制以及二次开发?
- 请QQ联系我们
发表评论
还没有评论,快来抢沙发吧!