javascript html http backbone.js tastypie

javascript - Descargar enlace de anclaje con encabezado de autorización



html http (1)

Tengo un enlace que me gustaría agregar a la aplicación de una sola página de javascript (Marionette / Backbone) que descargará un archivo de Excel en el disco local del usuario a través del archivo guardado del navegador. Una solicitud HTTP típica sería:

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

Lo que resulta en la siguiente respuesta típica:

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

Me gustaría hacer esto con un elemento de anclaje simple con el estilo de un botón, ya que esto invocaría la maquinaria de almacenamiento de archivos del navegador. Algo similar a:

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

No tengo claro cómo puedo pasar el encabezado de autorización al hacer esto a través de un enlace de anclaje, o tal vez no estoy pensando y hay una mejor manera.

Mi backend es una aplicación web de Django que usa Tastypie.


Esto no es posible, porque la única forma de agregar encabezados HTTP es usar XHR , pero XHR no se puede usar para descargar archivos .

Sin embargo, podrías usar cookies para hacer eso.

  1. Simplemente configure la cookie, con un valor devuelto desde el servidor.
  2. Espera a que el usuario haga clic en el enlace.
  3. Invalide la cookie después de que el usuario haya hecho clic en el enlace.