我想通过浏览器开始简单的文件下载,但是必须使用自定义HTTP标头传递访问令牌:
GET https://my.site.com/some/file
Authorization: access_token
如何在网站网址后面注入授权:标头? 我知道使用查询字符串可以做到这一点,但我想用标题来做。
我熟悉XMLHttpRequest,但据我所知它不会触发下载,它只读取内容,我想下载的文件至少是几百MB。
xhr.setRequestHeader('Authorization', 'access_token');
这看起来像一个简单的任务,但我没有经验的编码器,所以任何帮助都会很好。感谢。
答案 0 :(得分:5)
我认为这可以解决您的问题:
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以满足您的需求。
答案 1 :(得分:0)
https://stackoverflow.com/a/12372670/1961561可以解决您的问题。
$.ajax({
url: "/test",
headers: {"X-Test-Header": "test-value"}
});
答案 2 :(得分:0)
单击链接下载文件时无法添加自定义http标头。
但是,在您的用例中,您可以将令牌存储在cookie中,该cookie将自动添加到所有浏览器请求中。