当前位置:首页 > php > 正文内容

a标签跨域下载文件,解决download失效问题

phpmianshi4个月前 (07-02)php311

背景


a标签中download属性可以更改下载文件的文件名。但是如果是跨域的话,download属性就会失效。


解决方案一

<a onclick="downloadFile('https://img1-cdn-picsh.stock-ring.com/download/pdf/2021-6-23/pdf_16244197738344649.pdf','fileName.pdf');">下载文件</a>

<a onclick="downloadFile('https://img1-cdn-picsh.stock-ring.com/download/mp3/2021-6-23/mp3_16244197781388916.mp3','fileName.mp3');">下载文件</a>

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


解决方案二

当然我们也可以通过设置响应的header

Content-Disposition 

用来激活浏览器的下载,同时可以设置默认的下载的文件名。
服务端向客户端浏览器发送文件时,如果是浏览器支持的文件类型,如 TXT、JPG 等类型,会默认直接使用浏览器打开,如果需要提示用户保存,则可以通过配置 Content-Disposition 字段覆盖浏览器默认行为。常用的配置如下:
Content-Disposition:attachment;filename=FileName.txt


如果发现地址打开,无法下载或者自动保存的地址不是自己想要的默认名字时,可以考虑修改返回的header,腾讯云COS,CDN等都可以设置返回的header


参考文献:

https://cloud.tencent.com/document/product/228/41737



版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

PHP对象使用数组形式访问成员变量

PHP中有很多接口类,不过平时都不会怎么用到.一般访问php类的变量都是使用类->变量名进行访问.除了这样还可以实现接口类用数组方式进行访问类["变量名"]需要实现的是Arr...

DAL、DAO、ORM、Active Record详解

模型 Model模型是MVC中的概念,指的是读取数据和改变数据的操作(业务逻辑)。一开始我们直接把和数据库相关的代码放在模型里(sql直接写在代码中),这样就会导致以后的维护相当麻烦。业务逻辑的修改都...

PHP中self与static区别和联系

PHP官方也说过,大概意思是说self调用的就是本身代码片段这个类,static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,static调用的是从堆内存中提取出来,访问的是当...

php中autoload机制详解

背景PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义在同一...

php中Memcache::get(): Server...failed with: Failed reading line from stream

背景最近sentry报告PHP的memcache客户端php-memcache经常出 现断连接的问题:PHP Notice:  Memcache::get(): Server ………. (t...

php中容易出错的小案例

sprintf用到sprintf 的时候 如果有传递的变量  如果变量可能出现 % ,则容易出错<?php $content = "%')(...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。