【问题标题】:Using Javascript to add custom http header and trigger file download使用Javascript添加自定义http头和触发文件下载
【发布时间】:2013-05-11 15:47:04
【问题描述】:

我想通过浏览器开始一个简单的文件下载,但是必须使用自定义 HTTP 标头传递访问令牌:

GET https://my.site.com/some/file
Authorization: access_token

如何在站点 URL 之后注入 Authorization: 标头? 我知道可以使用查询字符串来做到这一点,但我想使用标题来做到这一点。

我对XMLHttpRequest很熟悉,但据我了解它不会触发下载,它只读取内容,我要下载的文件至少有几百MB。

xhr.setRequestHeader('Authorization', 'access_token');

这看起来像一个简单的任务,但我是没有经验的编码器,所以任何帮助都会很好。谢谢。

【问题讨论】:

  • 为什么不在服务器端做,你通常会设置标题?
  • 因为我要下载的文件不在我的服务器上。我的服务器只生成令牌。另外,我不想使用任何 PHP 中继,因为这会花费我很多流量。

标签: javascript http-headers download


【解决方案1】:

我认为这可以解决您的问题:

function toBinaryString(data) {
    var ret = [];
    var len = data.length;
    var byte;
    for (var i = 0; i < len; i++) { 
        byte=( data.charCodeAt(i) & 0xFF )>>> 0;
        ret.push( String.fromCharCode(byte) );
    }

    return ret.join('');
}


var xhr = new XMLHttpRequest;

xhr.open( "GET", "https://my.site.com/some/file" );     

xhr.addEventListener( "load", function(){
    var data = toBinaryString(this.responseText);
    data = "data:application/text;base64,"+btoa(data);
    document.location = data;
}, false);

xhr.setRequestHeader("Authorization", "access_token" );
xhr.overrideMimeType( "application/octet-stream; charset=x-user-defined;" );
xhr.send(null);

修改答案https://stackoverflow.com/a/10518190/2767026 以满足您的需求。

【讨论】:

  • 是否可以为下载设置自定义文件名?
  • @Oleksii 我不知道,很久以前就回答了,当时这段代码符合我的需要...... :( 对不起。
  • 其实是这样。因此:link.attr({ "href": data, "download": name + new Date().valueOf() + ext })
【解决方案2】:

https://stackoverflow.com/a/12372670/1961561 可以解决您的问题。

$.ajax({
  url: "/test",
  headers: {"X-Test-Header": "test-value"}
});

【讨论】:

  • 谢谢,它看起来像我想要的,但我不使用 jQuery。是在“纯javascript”中做到这一点的一种方法吗?
  • 不,它仍然不会触发下载。
  • 出于安全原因,您不能使用 ajax 下载文件并将其保存到磁盘
【解决方案3】:

当您通过单击链接下载文件时,无法添加自定义 http 标头。

但是,在您的用例中,您可以将令牌存储在 cookie 中,该 cookie 将自动添加到所有浏览器请求中。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2012-12-16
    • 2022-01-07
    • 1970-01-01
    • 2017-11-11
    • 2020-06-16
    相关资源
    最近更新 更多