使用Javascript添加自定义http头并触发文件下载
我想通过浏览器开始一个简单的文件下载,但是必须通过自定义HTTP头传递访问令牌:使用Javascript添加自定义http头并触发文件下载,javascript,http-headers,download,Javascript,Http Headers,Download,我想通过浏览器开始一个简单的文件下载,但是必须通过自定义HTTP头传递访问令牌: GET https://my.site.com/some/file Authorization: access_token 如何在站点URL之后插入Authorization:header? 我知道使用查询字符串可以做到这一点,但我想使用标题 我熟悉XMLHttpRequest,但据我所知,它不会触发下载,它只读取内容,我想下载的文件至少有几百MB xhr.setRequestHeader('Authorizat
GET https://my.site.com/some/file
Authorization: access_token
如何在站点URL之后插入Authorization:header?
我知道使用查询字符串可以做到这一点,但我想使用标题
我熟悉XMLHttpRequest,但据我所知,它不会触发下载,它只读取内容,我想下载的文件至少有几百MB
xhr.setRequestHeader('Authorization', 'access_token');
这看起来是一个简单的任务,但我是一个没有经验的程序员,所以任何帮助都会很好。谢谢。可以解决您的问题
$.ajax({
url: "/test",
headers: {"X-Test-Header": "test-value"}
});
我认为这解决了你的问题:
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);
函数到二进制串(数据){
var-ret=[];
var len=data.length;
变量字节;
对于(var i=0;i>>0;
ret.push(String.fromCharCode(字节));
}
返回ret.join(“”);
}
var xhr=新的XMLHttpRequest;
xhr.open(“GET”https://my.site.com/some/file" );
addEventListener(“加载”,函数(){
var data=toBinaryString(this.responseText);
data=“数据:应用程序/文本;base64,”+btoa(数据);
document.location=数据;
},假);
setRequestHeader(“授权”、“访问令牌”);
overrideMimeType(“应用程序/八位字节流;字符集=x-user-defined;”);
xhr.send(空);
修改答案以满足您的需要。当您通过单击链接下载文件时,无法添加自定义http头
但是,在您的用例中,您可以将令牌存储在cookie中,cookie将自动添加到所有浏览器请求中。为什么不在服务器端执行此操作,通常在服务器端设置头?因为我要下载的文件不在我的服务器上。我的服务器只生成令牌。另外,我不想使用任何PHP中继,因为这将花费我大量的流量。谢谢,它看起来像我想要的,但我不使用jQuery。在“纯javascript”中有这样做的方法吗?没有,它仍然不会触发下载。出于安全原因,您不能使用ajax下载文件并将其保存到磁盘上。是否可以为下载设置自定义文件名?@Oleksii我不知道,很久以前回答过,当时该代码适合我的需要…:(很抱歉,事实上是这样的。同样:link.attr({“href”:data,“download”:name+newdate().valueOf()+ext})