2014-05-06 14 views
12

के साथ एंकर लिंक डाउनलोड करें मेरे पास एक लिंक है जिसे मैं अपने जावास्क्रिप्ट (मैरियनेट/बैकबोन) एकल पृष्ठ एप्लिकेशन में जोड़ना चाहता हूं जो ब्राउज़र की फ़ाइल सहेजने के माध्यम से उपयोगकर्ता के स्थानीय ड्राइव में एक्सेल फ़ाइल डाउनलोड करेगा। एक ठेठ 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 वेब ऐप है।

उत्तर

12

यह संभव नहीं है, क्योंकि the only way to add HTTP headers is using the XHR, लेकिन XHR cannot be used to download files

हालांकि आप ऐसा करने के लिए कुकीज़ का उपयोग कर सकते हैं।

  1. बस सर्वर से लौटाए गए मूल्य के साथ कुकी सेट करें।
  2. उपयोगकर्ता तक लिंक पर क्लिक करने तक प्रतीक्षा करें।
  3. उपयोगकर्ता द्वारा लिंक पर क्लिक करने के बाद कुकी को अमान्य करें।
+0

मुझे संदेह था कि यह मामला था। बस सुनिश्चित करना चाहता था। मुझे लगता है कि आप किसी भी प्रकार की सत्र कुकी व्यवस्था पर वापस आ जाएंगे जो आप सुझा रहे हैं। धन्यवाद! – Erik

+3

फ़ाइलएपीआई के साथ यह संभव है: http://stackoverflow.com/a/24523253/3703604 – Robert

संबंधित मुद्दे