2014-05-06 21 views
12

Tôi có một liên kết mà tôi muốn thêm vào ứng dụng đơn javascript (Marionette/Backbone) của tôi sẽ tải xuống tệp Excel vào ổ đĩa cục bộ của người dùng thông qua lưu tệp của trình duyệt. Một yêu cầu HTTP điển hình sẽ là:Tải xuống liên kết anchor với tiêu đề ủy quyền

GET /api/v1/objects/?format=xls HTTP/1.1 
Authorization: ApiKey username:apikey 
Host: api.example.com 
Connection: close 
User-Agent: Paw 2.0.5 (Macintosh; Mac OS X 10.9.2; en_US) 
Content-Length: 0 

Những kết quả trong các phản ứng đặc trưng sau:

HTTP/1.1 200 OK 
Server: gunicorn/18.0 
Date: Tue, 06 May 2014 03:09:02 GMT 
Connection: close 
Transfer-Encoding: chunked 
Vary: Accept 
Content-Type: application/vnd.ms-excel 
Content-Disposition: attachment; filename="filename.xls" 
Cache-Control: no-cache 

<<CONTENT HERE>>> 

Tôi muốn làm điều này với một yếu tố neo đơn giản tạo kiểu như một nút vì điều này sẽ gọi máy lưu trữ tệp của trình duyệt. Một cái gì đó tương tự như:

<a href="/api/v1/objects/?format=xls" class="btn btn-primary pull-right">Download to Excel file</a> 

Tôi không rõ làm cách nào để nhận tiêu đề ủy quyền khi thực hiện điều này thông qua liên kết anchor - hoặc có lẽ tôi không nghĩ và có cách tốt hơn.

Chương trình phụ trợ của tôi là ứng dụng web Django sử dụng Tastypie.

Trả lời

12

Điều này không có thể, bởi vì the only way to add HTTP headers is using the XHR, nhưng XHR cannot be used to download files.

Tuy nhiên, bạn có thể sử dụng cookie để thực hiện việc đó.

  1. Chỉ cần đặt cookie, với giá trị trả về từ máy chủ.
  2. Đợi đến khi người dùng nhấp vào liên kết.
  3. Vô hiệu hóa cookie sau khi người dùng nhấp vào liên kết.
+0

Tôi nghi ngờ đây là trường hợp. Chỉ muốn chắc chắn. Tôi đoán tôi sẽ rơi trở lại trên một số loại sắp xếp cookie phiên tương tự như những gì bạn đang đề xuất. Cảm ơn! – Erik

+3

Có thể với FileAPI: http://stackoverflow.com/a/24523253/3703604 – Robert

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