JavaScript 下载文件并保持原文件名称

JavaScript 下载文件并保持原文件名称<script>//获取文件名functionfileNameFromHeader(disposition){varresult=null;if(disposition&&/filename=.*/ig.test(disposition)){result=dispos…

大家好,又见面了,我是你们的朋友全栈君。

<script>
 // 获取文件名
    function fileNameFromHeader (disposition) {
        var result = null;
        if (disposition && /filename=.*/ig.test(disposition)) {
            result = disposition.match(/filename=.*/ig);
            return decodeURI(result[0].split('=')[1]);
        }
        return null;
        }
function downloads() {
   var url = '/down_excel';
   var xhr = new XMLHttpRequest();

   xhr.open('GET', url, true);        // 也可以使用POST方式,根据接口

   xhr.responseType = "blob";    // 返回类型blob

   // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑

   xhr.onload = function () {

       // 请求完成

       if (this.status === 200) {

           // 返回200

           var blob = this.response
           var filenames = fileNameFromHeader(xhr.getResponseHeader('Content-Disposition'));
           var reader = new FileReader();

           reader.readAsDataURL(blob);    // 转换为base64,可以直接放入a表情href

           reader.onload = function (e) {

               // 转换完成,创建一个a标签用于下载

               var a = document.createElement('a');

               a.download = filenames.slice(1,filenames.length-1); //'data.xlsx';

               a.href = e.target.result;

               $("body").append(a);    // 修复firefox中无法触发click

               a.click();

               $(a).remove();

           }

       }

   };

   // 发送ajax请求

   xhr.send()

}
</script>

注:此代码只是个人根据当时的环境满足了当时的需求,记录下来用做后续参考!如有问题,请检查软硬件环境是否一致,由于时间精力有限,大部分未做详细环境描述。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134693.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月6日 下午1:16
下一篇 2022年6月6日 下午1:16


相关推荐

  • OpenClaw实战:LinkedIn客户挖掘+Cold Email自动化开发流程搭建指南

    OpenClaw实战:LinkedIn客户挖掘+Cold Email自动化开发流程搭建指南

    2026年3月13日
    2
  • matlab画图标签,Matlab绘图

    matlab画图标签,Matlab绘图要使用plot函数来绘制图形,需要执行以下步骤:通过指定要绘制函数的变量x的值的范围来定义x。定义函数,y=f(x)调用plot命令,如下:plot(x,y)以下示例将演示该概念。下面绘制x的值范围是从0到100,使用简单函数y=x,增量值为5。创建脚本文件并键入以下代码-x=[0:5:100];y=x;plot(x,y)执行上面示例代码,得到以下结果-下面再来一个例子来绘制…

    2022年6月24日
    36
  • 国内大模型:DeepSeek V3和通义千问-Max对比

    国内大模型:DeepSeek V3和通义千问-Max对比

    2026年3月13日
    2
  • 回溯法解01背包问题

    回溯法解01背包问题概念 回溯法采用深搜 剪枝来搜索生成树 步骤 1 假设规定左叉标 1 代表选择该物品装入背包 右叉标 0 代表不选择该物品装入背包 给定示例输入 背包容量 c 10 物品个数 n 5 物品重量 w 2 2 6 5 4 物品价格 p 6 3 5 4 6 注意 左子树的解的上界与父节点相同 不用计算 右子树的解的界值 较好的就算方法是将剩余物品依其单位重量价

    2026年3月26日
    4
  • 几款主流好用的markdown编辑器介绍

    几款主流好用的markdown编辑器介绍Markdown编辑器 Markdown其实在2004年就有了,不过之前一直很小众,这几年随着相关应用平台的发展,Markdown以其独到的优势迅速火起来了。Markdown编辑器使用一套格式标记语言来对文档内容进行排版和格式显示。而Markdown的标记很少,常用的也就十个左右,它是一种非常轻量的标记语言。 Markdown编辑器深受技术人员的喜爱,Markdown可以用来编写说明…

    2022年4月29日
    644
  • Webservice原理解析

    Webservice原理解析Webservice 的基本概念 WebServices nbsp 直译过来就 web nbsp 服务 nbsp 个人理解就是一种基于 Internet 的对外服务机制 nbsp 它的应用领域是 Internet 而不仅限于局域网或试验环境 这就要求我们的 WebServices nbsp 框架必须适用于现有的 Internet nbsp 软件和硬件环境 即服务的提供者所提供的服务必须具有跨平台 跨语言的特性 其次 WebServices nbsp 所提供的服务

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号