2013-05-16 33 views
9

tập tin kích hoạt Tôi muốn bắt đầu một tập tin tải về đơn giản thông qua trình duyệt, tuy nhiên một thẻ truy cập phải được thông qua với một tiêu đề HTTP tùy chỉnh:Sử dụng Javascript để thêm tiêu đề http tùy chỉnh và tải

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

Làm thế nào tôi có thể tiêm đầu trang Cấp phép: theo URL trang web? Tôi biết rằng có thể thực hiện điều đó bằng chuỗi truy vấn, nhưng tôi muốn làm điều đó bằng cách sử dụng tiêu đề.

Tôi quen thuộc với XMLHttpRequest, nhưng theo như tôi hiểu nó không kích hoạt tải xuống, nó chỉ đọc nội dung và tệp tôi muốn tải xuống ít nhất là vài trăm MB.

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

Điều này trông giống như một công việc đơn giản, nhưng tôi là người viết mã thiếu kinh nghiệm nên mọi sự trợ giúp đều tốt đẹp. Cảm ơn.

+0

Tại sao không làm điều đó trên máy chủ, nơi bạn thường đặt tiêu đề? – adeneo

+0

Vì tệp tôi muốn tải xuống không có trên máy chủ của tôi. Máy chủ của tôi chỉ tạo mã thông báo. Ngoài ra, tôi không muốn sử dụng bất kỳ chuyển tiếp PHP nào vì điều này sẽ khiến tôi tốn nhiều lưu lượng truy cập. – user2370553

Trả lời

5

Tôi nghĩ rằng điều này giải quyết vấn đề của bạn:

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 câu trả lời https://stackoverflow.com/a/10518190/2767026 để phù hợp với nhu cầu của bạn.

+0

Có thể đặt tên tệp tùy chỉnh để tải xuống không? – Oleksii

+0

@Oleksii Tôi không biết, đã trả lời một thời gian dài trước đây và vào thời điểm mã này phù hợp với nhu cầu của tôi ... :(Tôi xin lỗi –

+1

Thực ra nó là như vậy. Link.attr ({ "href": dữ liệu , "tải xuống": tên + ngày mới(). ValueOf() + ext }) – Oleksii

0

https://stackoverflow.com/a/12372670/1961561 có thể là giải pháp cho vấn đề của bạn.

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

Cảm ơn, nó trông giống như những gì tôi muốn, nhưng tôi không sử dụng jQuery. Có phải cách để thực hiện điều này trong "javascript thuần túy" không? – user2370553

+0

Không, nó vẫn không kích hoạt tải xuống. – user2370553

+0

Bạn không thể sử dụng ajax để tải xuống và lưu tệp vào đĩa vì lý do bảo mật – LordDawnhunter

0

Không thể thêm tiêu đề http tùy chỉnh khi bạn tải xuống tệp bằng cách nhấp vào liên kết.

Tuy nhiên, trong trường hợp sử dụng của bạn, bạn có thể lưu mã thông báo trong cookie, cookie này sẽ tự động được thêm vào tất cả các yêu cầu của trình duyệt.

Các vấn đề liên quan