2014-05-06 12 views
12

Ho un collegamento che vorrei aggiungere alla mia applicazione javascript (Marionette/Backbone) a pagina singola che scaricherà un file Excel nell'unità locale dell'utente tramite il salvataggio del file del browser. Una tipica richiesta HTTP sarebbe:Download link di ancoraggio con header di autorizzazione

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 

che si traduce nel seguente risposta tipica:

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

mi piacerebbe fare questo con un semplice elemento di ancoraggio in stile come un pulsante come questo sarebbe invocare la macchine per l'archiviazione di file del browser. Qualcosa di simile a:

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

io non sono chiare su come ottenere l'intestazione di autorizzazione per essere passato quando si fa questo tramite un collegamento ancoraggio - o forse sto solo non pensare e non c'è un modo migliore.

Il mio back-end è un'app di web Django che utilizza Tastypie.

risposta

12

Questo non possibile, perché the only way to add HTTP headers is using the XHR, ma XHR cannot be used to download files.

Si potrebbe tuttavia utilizzare i cookie per farlo.

  1. Basta impostare il cookie, con un valore restituito dal server.
  2. Attendere fino a quando l'utente fa clic sul collegamento.
  3. Invalida il cookie dopo che l'utente ha fatto clic sul collegamento.
+0

Sospettavo che fosse così. Volevo solo essere sicuro. Credo che ricadratteremo su una sorta di accordo sui cookie di sessione simile a quello che stai suggerendo. Grazie! – Erik

+3

È possibile con FileAPI: http://stackoverflow.com/a/24523253/3703604 – Robert