javascript - 下载带有授权 header 的 anchor 链接

标签 javascript html http backbone.js tastypie

我有一个链接,我想将其添加到我的 javascript (Marionette/Backbone) 单页应用程序中,该应用程序将通过浏览器的文件保存将 Excel 文件下载到用户的本地驱动器。一个典型的 HTTP 请求是:

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

这会导致以下典型响应:

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

我想使用样式为按钮的简单 anchor 元素来执行此操作,因为这会调用浏览器的文件存储机制。类似于:

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

我不清楚在通过 anchor 链接执行此操作时如何获得要传递的授权 header ——或者也许我只是没有考虑,有更好的方法。

我的后端是一个使用 Tastypie 的 Django 网络应用。

最佳答案

2022 年更新

显然,它现在可以与 XHR 一起使用,如 this answer 所示。 .感谢Jamie Pete供引用。


原始答案

不可能,因为the only way to add HTTP headers is using the XHR , 但是 XHR cannot be used to download files .

不过,您可以使用 cookie 来做到这一点。

  1. 只需设置 cookie,并使用服务器返回的值。
  2. 等到用户点击链接。
  3. 在用户点击链接后使 cookie 失效。

关于javascript - 下载带有授权 header 的 anchor 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485857/

相关文章:

language-agnostic - HTTP 状态 header 的语法

javascript - 从 html 中分离元素样式

javascript - AngularJS - ng-disabled true/false 无法正常工作

javascript - 如何处理所有 AJAX 调用的特定 HTTP 错误?

java - 执行 HTTP.PUT 的正确方法

javascript - 当用户在 HTML 选择中选择当前选项时是否可以触发 JavaScript?

javascript - HTML Javascript 在 for 循环中添加一个 var 作为输入值

javascript - 坚持使用 Javascript 中的正则表达式

javascript - 如何防止 Backbone 模型向集合事件传播?

javascript - jquery 多个输入字段的总和(如果一个输入中有相同的类)