a标签模拟下载

简介: a标签模拟下载
/**
 * a标签下载
 *
 * @param {*} url 链接
 * @param {*} options 参数 { payload: url携带参数 }
 * @returns {Boolean} success
 */
export function downloadByLink(url, options) {
    if (!url) return false

    const a = document.createElement('a')

    // 添加属性
    let href = url
    const {
        payload,
        ...attrs
    } = options || {}
    attrs.href = payload ? (href += '?' + qs.stringify(payload)) : href
    Object.entries(attrs).forEach(([key, value]) => {
        a.setAttribute(key, value)
    })
    a.setAttribute('target', '_self')

    // 触发下载
    document.body.appendChild(a)
    a.click()
    a.onclick = e => {
        e && e.preventDefault()
    }
    a.parentNode.removeChild(a)

    return true
}

加载script

/**
 * 加载脚本
 *
 * @param {String} src 地址
 * @param {*} options 属性 { autoremove: 用完就扔, ... }
 *
 * @returns {Promise}
 *
 * @throws {Error}
 */
export function loadScript(src, options) {
    const {
        autoremove = true, ...attrs
    } = options || {}
    return new Promise((resolve, reject) => {
        const script = document.createElement('script')
        Object.entries(attrs).forEach(([key, val]) => {
            script.setAttribute(key, val)
        })
        script.src = src
        script.onload = () => {
            if (autoremove) {
                script.onload = script.onerror = null
                document.head.removeChild(script)
            }
            resolve()
        }
        script.onerror = reject
        document.head.appendChild(script)
    })
}

Blob文件转换下载

// Blob文件转换下载
export const downBlobFile = (result, fileName, fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8;', submitEndDo ? , timeSuffix = true) => {
    const data = result
    const blob = new Blob([data], {
        type: fileType
    })
    if (timeSuffix) {
        // 默认导出的文件名称添加时间
        const time = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
        fileName = fileName + ' ' + time
    }
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        // for IE
        // IE必须给文件名设置固定后缀,不然默认会是.txt
        window.navigator.msSaveOrOpenBlob(blob, fileName + '.xlsx')
    } else {
        // for Non-IE (chrome, firefox etc.)
        const objectUrl = URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.setAttribute('style', 'display:none')
        a.setAttribute('href', objectUrl)
        a.setAttribute('download', fileName)
        a.click()
        URL.revokeObjectURL(objectUrl)
    }
    if (submitEndDo) {
        submitEndDo()
        submitEndDo = null
    }
}
目录
相关文章
|
JavaScript 前端开发
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
399 0
|
10月前
|
JavaScript 前端开发 Windows
VScode的注释和标题,标签,img的src属性(如何网页上插入图片)(Mac如何开启js控制台)(如何免费复制网页中的文字)
VScode的注释和标题,标签,img的src属性(如何网页上插入图片)(Mac如何开启js控制台)(如何免费复制网页中的文字)
|
9月前
|
JavaScript 前端开发
jQuery点击图片来回切换功能
jQuery点击图片来回切换功能
80 0
jQuery点击图片来回切换功能
|
存储 JavaScript Linux
网页爱心特效弱爆了,我让你点击网页显示所有python模块!
一个点击网页出现爱心特效的插件 click_heart.js ,当然大家可能也见过其他博客上面,有点击网页出现类似 富强、民主、文明、和谐等等,关于代码在这里不多赘述,网上一查就能查到。代码如下:
440 0
|
JavaScript
js小效果之聊天界面检测输入状态
js小效果之聊天界面检测输入状态
|
JavaScript 数据处理 前端开发