Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript添加自定义http头并触发文件下载_Javascript_Http Headers_Download - Fatal编程技术网

使用Javascript添加自定义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

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

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})