首页 > 其他分享 >[a]html中a标签跨域属性download无效,即预期下载变成了预览

[a]html中a标签跨域属性download无效,即预期下载变成了预览

时间:2024-05-07 22:55:18浏览次数:24  
标签:跨域 url html blob download document response

同源,a标签downlaod属性浏览器基本都支持下载

非同源,提供两个下载方法

        function downloadFile(url, filename) {
            fetch(url).then(response => {
                return response.blob();
            }).then(blob => {
                const a = document.createElement('a');
                a.href = URL.createObjectURL(blob);
                a.download = filename;
                a.style.display = 'none';
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
                URL.revokeObjectURL(a.href);
            }).catch(error => console.error('downloading file fail:', error));
        } 
      // 使用示例 downloadFile('https://example.com/xxx.pdf', 'xxx.pdf');

 

        function downloadFile(url, fileName) {
            let x = new XMLHttpRequest();
            x.open("GET", url, true);
            x.responseType = 'blob';
            x.onload = function (e) {
                let url = window.URL.createObjectURL(x.response)
                let a = document.createElement('a');
                a.href = url
                a.download = fileName;
                a.click()
            }
            x.send();
        }

执行报错

Access to fetch at 'http://。。。' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

解决:需要服务端设置允许跨域请求

springboot举例(以前写过,找个相似的,附上未测试的代码参考)

CorsConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//解决跨域访问的配置
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //path:“/**”表示的是拦截对应域名下的所有请求,也可以自行设置请求路径。
        registry.addMapping("/**")
                .allowedOrigins()
                //allowedOrigins():设置能跨域访问我的域名,其中*号代表任意域名。
                //.allowedOriginPatterns("*")//注意版本
                // 是否允许携带cookie?默认情况下值为false。
                .allowCredentials(true)
                // 接受的请求方式。
                .allowedMethods("GET","POST","PUT","DELETE")
                // 本次许可的有效时长,单位是秒
                .maxAge(3600);
    }
}

固定写死网址测试结果,浏览器response中应该会返回允许跨域的值:Access-Control-Allow-Origin:*

 

 

 

 

标签:跨域,url,html,blob,download,document,response
From: https://www.cnblogs.com/leonlipfsj/p/18178594

相关文章

  • HTML学习笔记
    1、HTML基础介绍HTML(HyperTextMarkupLanguage)是用来描述和定义网页内容的标记语言。主要用于创建结构化文档,比如网页文章、视频嵌入、图片展示等。参考文档:HTML基础HTML简介HTML编辑器2.常用标签和属性标题标签:<h1>到<h6>,表示6级不同重要性的标题。段落标签:<p>,用......
  • 9.前端——HTML详细
    HTML详解HyperTextMarkupLanguage(超文本标记语言)HTML5W3C(万维网联盟WorldWideWebConsortium)国际中立性技术标准机构W3C标准包括结构化标准语言(HTML,XML)表现标准语言(CSS)行为标准(DOM,ECMAScript)网页基本结构<!--网页基本结构--><!--DOCTYPE:告诉浏览器,使用什么......
  • vue怎么设置html不缓存 但是js、css等文件做缓存
    在 Vue.js 项目中,我们通常使用 webpack 打包工具进行编译构建,其中 HTML 文件通常不做缓存,而 JS、CSS 文件需要做缓存。这可以通过 webpack 的配置实现。下面是针对你的问题的步骤:1. 打开 webpack 的配置文件 webpack.config.js 或者 webpack.prod.config.js(如果你......
  • 跨域请求解决办法(Django)
    跨域请求解决办法(Django)1.安装第三方扩展:pipinstalldjango-cors-headerssettings.py里面操作2.添加应用:INSTALLED_APPS=(...'corsheaders',...)3.第三步,添加中间件,注意放在第一条,第一时间进行处理:MIDDLEWARE=['corsheaders.middleware.......
  • HTML & CSS – Styling Scrollbar
    前言Scrollbar能styling的东西不多,但有时候不得不styling。这里记入我自己在项目中修改过的scrollbar经历。 GmailScrollbar Gmail的scrollbar就改过style。   ......
  • JS转义html编码
    两个方法:1、利用用浏览器内部转换器实现html转义;2、用正则表达式实现html转义; varHtmlUtil={/*1.用浏览器内部转换器实现html编码(转义)*/htmlEncode:function(html){//1.首先动态创建一个容器标签元素,如DIVvartemp=docum......
  • 多区域协作时 如何实现便捷可控的文件跨域传输?
    文件跨域传输的场景在现代企业运营中非常普遍,特别是在那些具有分布式结构或需要跨地域合作的组织中。 以下是一些典型的多区域文件传输场景:1、企业内部跨地域传输:大型企业或跨国公司在不同地区设有分支机构,需要在这些分支机构之间传输业务数据和公司文件。2、供应链管理:在供......
  • filedownload-基于pikachu的学习
    Filedownload原理文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。如果后台在收到请求的文件名后,将......
  • html中a标签的下划线怎么去掉
    如何在HTML中去除超链接的下划线在HTML中,超链接(<a></a>标签)通常带有一个默认的下划线。要去除下划线,可以使用以下方法:使用CSS最常用的方法是使用CSS样式表。在部分添加以下CSS规则:<codeclass="<astyle='color:#f60;text-decoration:underline;'href="https:......
  • HTML页面关于高分屏的设置
    记录一个HTML页面关于高分屏的踩到的坑。所谓高分屏,就是在同样大小的屏幕面积上显示更多的像素点,这样可以呈现更好的可视效果的屏幕。例如,我的笔记本是15.6寸,理论上它的屏幕分辨率应该是1920x1080像素,但实际上我的笔记本屏幕分辨率确实2560x1440像素,也就是俗称的2K屏。这样的......