美文网首页
a标签下载同源或不同源文件的实现方法

a标签下载同源或不同源文件的实现方法

作者: 乐宝呗 | 来源:发表于2023-11-14 16:27 被阅读0次

场景一: 文件的url地址和当前访问网址同源

export const downLoadFileByUrl = ({ url, name }) => {
  const link = document.createElement('a')
  link.href = url
  link.download = name
  link.click()
  link.remove()
}

同源时,通过download设置下载文件名称是有效的,当不同源时download设置文件名称为无效
且下载进度会在浏览器最近下载记录中从0% 走到 100%

场景二:文件的url地址和当前访问网址不同源

import { Loading } from 'element-ui'
export const downLoadFileByUrl = ({ url, name }) => {
    const loading = Loading.service({
        text: '下载文件中,请耐心等待...',
        background: 'rgba(0, 0, 0, 0.4)'
    })
    fetch(url)
        .then((response) => response.blob())
        .then((result) => {
            const objectUrl = window.URL.createObjectURL(result)
            const link = document.createElement('a')
            link.href = objectUrl
            link.download = name
            link.click()
            link.remove()
            window.URL.revokeObjectURL(objectUrl)
            loading.close()
        })
}

不同源的情况时,需要先请求数据,然后再用a标签下载,这种情况,一开始下载进度不会出现在浏览器的最近下载记录中,只在下载到100%时,才展示在浏览器的下载记录中,所以最好加上loading,以防文件过大下载时间长而导致的无反应问题。

相关文章

  • vue图片,pdf等资源文件下载到本地(同源和跨域两种方法)

    同源(访问的网站域名与服务器域名一致)才能用方法一下载 方法一: 同源资源文件下载 方法二: 跨域资源图片下载 方...

  • 跨源访问网络

    跨源网络访问 同源策略控制了不同源之间的交互,例如在使用XMLHttpRequest或 标签时则会受到同源策略的约...

  • Markdown第一天-part1换行

    换行的两种方法: 方法1:标签


    特点: 单个标签可以实现换行, 多个标签可以实现多...

  • 下载图片时,a标签无法下载问题

    原因: 标签通过download 属性下载文件只适用于同源的文件 非同源的时候 标签的download属性无效,会...

  • JSONP原理以及实现

    原理 利用script标签的src属性的不受同源策略的限制,其主要的实现方式就是创建callback方法、动态创建...

  • a标签下载文件

    有两种方法,1:a标签 。2:iframe。不同的是:a标签只能下载单个文件,iframe可以多文件下载。 前提是...

  • vue 图片下载到本地,图片保存到本地

    必须同源(访问的网站域名与服务器域名一致)才能下载 解决图片不同源下载问题

  • 什么是跨域?跨域有几种实现形式:

    跨域指的是跨过同源策略,实现不同域之间进行数据交互的过程叫跨域。跨域的实现形式主要有JSONP方法、CORS方法、...

  • 跨域

    跨域指的是跨过同源策略,实现不同域之间进行数据交互的过程叫跨域。跨域的实现形式主要有JSONP方法、CORS方法、...

  • frame之间传值的方法

    1.messageAPI poseMessage方法可以允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨...

网友评论

      本文标题:a标签下载同源或不同源文件的实现方法

      本文链接:https://www.haomeiwen.com/subject/fcpjwdtx.html