2013-05-16 8 views
9

Ich möchte hinzufügen, eine einfache Datei-Download über den Browser starten, aber ein Zugriffstoken mit einem benutzerdefinierten HTTP-Header übergeben werden müssen:Javascript Verwenden von benutzerdefinierten HTTP-Header und Trigger-Datei herunterladen

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

Wie kann ich injizieren Sie die Autorisierung: Header nach der URL der Website? Ich weiß, dass es möglich ist, das mit Query-String zu tun, aber ich möchte es mit Headern tun.

Ich bin mit XMLHttpRequest vertraut, aber soweit ich verstehe, löst es keinen Download aus, es liest nur Inhalt und die Datei, die ich herunterladen möchte, ist mindestens einige hundert MB.

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

Das sieht nach einer einfachen Aufgabe aus, aber ich bin unerfahrener Programmierer, also wäre jede Hilfe nett. Vielen Dank.

+0

Warum nicht auf der Serverseite, wo Sie normalerweise die Header setzen würden? – adeneo

+0

Weil die Datei, die ich herunterladen möchte, nicht auf meinem Server ist. Mein Server generiert nur Token. Ich möchte auch keine PHP-Relaying verwenden, da dies mich viel Verkehr kosten würde. – user2370553

Antwort

5

Ich denke, das Ihr Problem löst:

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

Modified Antwort https://stackoverflow.com/a/10518190/2767026 auf Ihre Bedürfnisse ein.

+0

Ist es möglich, einen benutzerdefinierten Dateinamen für den Download einzugeben? – Oleksii

+0

@Oleksii Ich weiß nicht, antwortete vor langer Zeit und zu der Zeit dieser Code meine Bedürfnisse passen ... :(Es tut mir leid. –

+1

Eigentlich ist es. Wie so: link.attr ({ "href": Daten , "download": Name + neues Datum(). ValueOf() + ext }) – Oleksii

0

https://stackoverflow.com/a/12372670/1961561 könnte eine Lösung für Ihr Problem sein.

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

Danke, es sieht aus wie ich will, aber ich benutze jQuery nicht. Ist das eine Möglichkeit, dies in "reinem Javascript" zu tun? – user2370553

+0

Nop, es löst immer noch keinen Download aus. – user2370553

+0

Sie können Ajax aus Sicherheitsgründen nicht zum Herunterladen und Speichern einer Datei auf der Festplatte verwenden. – LordDawnhunter

0

Es ist nicht möglich, benutzerdefinierte HTTP-Header hinzuzufügen, wenn Sie eine Datei herunterladen, indem Sie auf einen Link klicken.

In Ihrem Anwendungsfall können Sie das Token jedoch in einem Cookie speichern, das automatisch allen Browseranforderungen hinzugefügt wird.

Verwandte Themen