मुझे HTTP प्रतिक्रिया में CSV फ़ाइल भेजने की आवश्यकता है। मैं CSV प्रारूप के रूप में आउटपुट प्रतिक्रिया कैसे सेट कर सकता हूं?
ये काम नहीं कर रहा है:
Response.ContentType = "application/CSV";
मुझे HTTP प्रतिक्रिया में CSV फ़ाइल भेजने की आवश्यकता है। मैं CSV प्रारूप के रूप में आउटपुट प्रतिक्रिया कैसे सेट कर सकता हूं?
ये काम नहीं कर रहा है:
Response.ContentType = "application/CSV";
जवाबों:
का उपयोग करना text/csv
सबसे उपयुक्त प्रकार है।
आपको Content-Disposition
प्रतिक्रिया में हेडर जोड़ने पर भी विचार करना चाहिए । अक्सर एक टेक्स्ट / सीएसवी को इंटरनेट एक्सप्लोरर द्वारा सीधे एक्सेल के एक होस्ट किए गए इंस्टेंस में लोड किया जाएगा। यह वांछनीय परिणाम हो भी सकता है और नहीं भी।
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
उपरोक्त एक फ़ाइल "सेव एज़" डायलॉग का कारण बनेगा, जो कि आप जो चाहते हैं वह हो सकता है।
CSV का MIME प्रकार RFC 4180 के अनुसार पाठ / सीएसवी है ।
वर्षों से मैं इस बात के लिए हेडर के एक परिपूर्ण सेट का सम्मान कर रहा हूं जो सभी ब्राउज़रों में शानदार ढंग से काम करता है जो मुझे पता है
// these headers avoid IE problems when using https:
// see http://support.microsoft.com/kb/812935
header("Cache-Control: must-revalidate");
header("Pragma: must-revalidate");
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename.csv");
इन अन्य माइम-प्रकारों में से एक का प्रयास करें (यहाँ से: http://filext.com/file-extension/CSV )
इसके अलावा, माइम-प्रकार संवेदनशील हो सकता है ...
जस्ट यूज लाइक दैट
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
return new EmptyResult()
फ़ाइल नाम को छड़ी करने के लिए नियंत्रक विधि को समाप्त करना होगा । अन्यथा IE के रूप में फ़ाइल की कोशिश करेंगे और बचाने के लिए ActionName.htm
।
मैंने पाया है कि IE के साथ समस्या यह है कि यह रिटर्न डेटा को सूँघता है और अपना खुद का दिमाग बनाता है कि यह किस प्रकार का है, यह सोचता है कि इसे भेजा गया है। कई कारण होते हैं, जो इस कारण से होते हैं, जैसे कि टेक्स्ट फ़ाइलों के लिए हमेशा सेवर्स डायलॉग को खोलना क्योंकि आप डेटा ट्रैसफेरर्स के कम्प्रेशन का उपयोग कर रहे हैं। समाधान है (php कोड में) ......
header('X-Content-Type-Options: nosniff');
सामग्री प्रकार सेट करना और ऊपर वर्णित सामग्री स्वभाव अलग-अलग ब्राउज़रों के साथ बेतहाशा भिन्न परिणाम उत्पन्न करता है:
IE8: वांछित के रूप में SaveAs संवाद, और डिफ़ॉल्ट अनुप्रयोग के रूप में एक्सेल। 100% अच्छा है।
फ़ायरफ़ॉक्स: सेव्स डायलॉग दिखाता है, लेकिन फ़ायरफ़ॉक्स को पता नहीं है कि यह एक स्प्रेडशीट है। दृश्य स्टूडियो के साथ इसे खोलने का सुझाव देता है! 50% अच्छा है
क्रोम: संकेत पूरी तरह से नजरअंदाज कर रहे हैं। ब्राउज़र में CSV डेटा दिखाया गया है। 0% अच्छा है।
निश्चित रूप से इन सभी मामलों में मैं ब्राउज़रों का उल्लेख कर रहा हूं क्योंकि वे उस बॉक्स से बाहर आते हैं, जिसमें माइम / एप्लिकेशन रैपिंग का कोई अनुकूलन नहीं है।
C # MVC 4.5 के लिए आपको ऐसा करने की आवश्यकता है:
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".csv\"");
Response.Write(dataNeedToPrint);
Response.End();
return new EmptyResult(); //this line is important else it will not work.