You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单个XMLHttpRequest请求触发多份重复文件下载,如何避免?

解决XMLHttpRequest重复下载问题

你这段代码的问题很明确:同时发起了两次指向同一个地址的请求——window.location.assign(location)会让浏览器跳转至目标地址并触发下载,而XMLHttpRequest的xhr.send()又单独发起了一次GET请求到相同地址,自然会产生重复下载的情况。

解决办法:二选一即可

不需要同时使用两种请求方式,根据你的需求选其中一种:

  • 如果只是需要简单触发下载,直接保留页面跳转方式,删掉XMLHttpRequest相关代码:

    var location = abc+ "/tasksample/";
    window.location.assign(location);
    
  • 如果需要用XMLHttpRequest做额外处理(比如监听下载进度),就删掉window.location.assign(location),同时确保后端正确设置下载响应头,再通过前端创建标签触发下载:

    var location = abc+ "/tasksample/";
    var xhr = new XMLHttpRequest();
    xhr.open("GET", location, true);
    xhr.responseType = 'blob'; // 设置响应为二进制流
    xhr.onload = function() {
        if (xhr.status === 200) {
            var blob = xhr.response;
            var downloadLink = document.createElement('a');
            var url = window.URL.createObjectURL(blob);
            downloadLink.href = url;
            downloadLink.download = 'sample-file'; // 自定义下载文件名
            document.body.appendChild(downloadLink);
            downloadLink.click();
            // 清理临时资源
            window.URL.revokeObjectURL(url);
            document.body.removeChild(downloadLink);
        }
    };
    xhr.send();
    

内容的提问来源于stack exchange,提问作者Harsha G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:39:57