账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js中如何使用ajax的get来向后台获取文件流进行文件下载(其中header中传token参数)
    31
    0

    js中如何使用ajax的get来向后台获取文件流进行文件另存为的下载

    其中header需要传token和os参数到后台进行验证

    请问这个JS应该如何写?希望大神不吝赐教,谢谢~

    如下方法后台无法获取header参数,360浏览器中也没有启动另存为的窗口

    var url = "{#$apiHost#}/aw/export?brand_ids="+brand_ids;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = "blob";
    xhr.setRequestHeader("token", "5f963175cc75613398e25ce2e5da56d7");
    xhr.setRequestHeader("os", "1");
    xhr.onload = function() {
        if (this.status == 200) {
            try{
                var elemIF = document.createElement("iframe");
                elemIF.src = this.responseURL;
                elemIF.style.display = "none";
                document.body.appendChild(elemIF);
            }catch(e){
            }
        }
    }
    xhr.send();
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 夏温存∽ 普通会员 1楼

      在JavaScript中,你可以使用Ajax的get方法向后台获取文件流。你可以设置async属性为false来阻止浏览器的AJAX请求,或者在success回调函数中处理返回的数据。

      以下是一个示例:

      javascript $.ajax({ url: 'https://example.com/file', type: 'GET', async: false, success: function(fileStream) { // 处理文件流 var reader = new FileReader(); reader.onload = function(e) { // 处理读取到的数据 var data = e.target.result; // 使用data来下载文件 // 下面的代码是简单的文件下载示例 var blob = new Blob([data], {type: 'application/octet-stream'}); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'file.txt'; document.body.appendChild(a); a.click(); document.body.removeChild(a); }; reader.readAsDataURL(fileStream); }, error: function(error) { console.error('Error:', error); } });

      在这个示例中,我们首先设置了async属性为false来阻止浏览器的AJAX请求。然后,我们设置了一个FileReader对象来读取文件流。当读取到文件数据后,我们创建了一个新的Blob对象,并使用URL.createObjectURL方法将其转换为URL。然后,我们创建了一个新的a元素,并设置了它的href属性为URL。最后,我们点击a元素来下载文件。

      注意:在实际使用中,你需要将fileStream替换为你实际的文件流,例如从服务器的响应中获取的文件流。同时,你还需要将data替换为你实际处理文件数据的方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部