js 文件下载 file-download
2023-12-20 13:46:32
js 文件下载 file-download
1.自定义xml请求
let xhr = new XMLHttpRequest()
xhr.open('GET', url, true)
xhr.withCredentials = !!false
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.setRequestHeader('Access-Control-Allow-Headers', '*')
xhr.responseType = 'blob'
xhr.onload = () => {
let ctx = xhr.response
let blob = new Blob([ctx])
let nameArray = url.split('.')
let typeIndex = nameArray.length - 1
if ('msSaveOrOpenBlob' in navigator) {
//兼容IE
window.navigator.msSaveOrOpenBlob(blob, fileName + '.' + nameArray[typeIndex)
} else {
let aLink = document.createElement('a')
aLink.download = fileName + '.' + nameArray[typeIndex]
aLink.style.display = 'none'
aLink.href = URL.createObjectURL(blob)
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink)
}
}
// 终止请求
xhr.abort()
// 发送请求
xhr.send(null)
注意:其中 xhr.abort()
可以中止正在进行的请求。用法如下:
xhr.onreadystatechange = function () {}; //事件响应函数
xhr.abort(); //中止请求
本人在创建自定义请求时,存在跨域问题,添加上 xhr.abort()
,可以解决跨域问题,其中原理不是很明确,有知道的大佬,希望可以解释下,多谢。
2.使用现成的下载插件 js-file-downloader
使用方法
npm install js-file-downloader --save
import JsFileDownloader from 'js-file-downloader';
const fileUrl = 'http://...';
new JsFileDownloader({
url: fileUrl
})
.then(function () {
// Called when download ended
})
.catch(function (error) {
// Called when an error occurred
});
参数有
timeout: 40000, // 超时设置
headers: [], // 请求头部
forceDesktopMode: false,
autoStart: true,
withCredentials: false,
method: 'GET',
nameCallback: name => name, // 处理文件名称
contentType: 'application/x-www-form-urlencoded',
body: null, // 参数
nativeFallbackOnError: false,
contentTypeDetermination: false
还有其他的下载插件,各位可以自行借鉴!!
文章来源:https://blog.csdn.net/qq_34164814/article/details/135102226
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!