下载带有授权标题的锚链接

时间:2014-05-06 04:14:52

标签: 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>>>

我想用一个简单的锚元素作为按钮来做这个,因为这会调用浏览器的文件存储机制。类似于:

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

我不清楚如何通过锚链接获取授权标题 - 或者我可能只是没有思考并且有更好的方法。

我的后端是使用Tastypie的Django网络应用程序。

2 个答案:

答案 0 :(得分:15)

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

然而,你可以使用cookie来做到这一点。

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

答案 1 :(得分:0)

不是在标头中传递令牌,而是将其作为 url 参数传递

<a href="/api/download/answers/{{token}}/{{survey._id}}" download="answers.csv" >
</a>