我有一个链接,我想将其添加到我的 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 来做到这一点。
- 只需设置 cookie,并使用服务器返回的值。
- 等到用户点击链接。
- 在用户点击链接后使 cookie 失效。
关于javascript - 下载带有授权 header 的 anchor 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485857/