प्रतिक्रिया सामग्री प्रकार CSV के रूप में


328

मुझे HTTP प्रतिक्रिया में CSV फ़ाइल भेजने की आवश्यकता है। मैं CSV प्रारूप के रूप में आउटपुट प्रतिक्रिया कैसे सेट कर सकता हूं?

ये काम नहीं कर रहा है:

Response.ContentType = "application/CSV";

जवाबों:


491

का उपयोग करना text/csvसबसे उपयुक्त प्रकार है।

आपको Content-Dispositionप्रतिक्रिया में हेडर जोड़ने पर भी विचार करना चाहिए । अक्सर एक टेक्स्ट / सीएसवी को इंटरनेट एक्सप्लोरर द्वारा सीधे एक्सेल के एक होस्ट किए गए इंस्टेंस में लोड किया जाएगा। यह वांछनीय परिणाम हो भी सकता है और नहीं भी।

Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

उपरोक्त एक फ़ाइल "सेव एज़" डायलॉग का कारण बनेगा, जो कि आप जो चाहते हैं वह हो सकता है।


2
मुझे उस स्ट्रिंग के निर्माण के लिए System.Net.Mime.ContentDisposition ऑब्जेक्ट का उपयोग करना पसंद है।
रॉनी ओवरबी


62

text/csvसामग्री प्रकार के रूप में उपयोग करें ।


48

वर्षों से मैं इस बात के लिए हेडर के एक परिपूर्ण सेट का सम्मान कर रहा हूं जो सभी ब्राउज़रों में शानदार ढंग से काम करता है जो मुझे पता है

// 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");

7
यदि आप एप्लिकेशन / vnd.ms-excel का उपयोग करते हैं। ओएक्सएक्स सफारी पर ".xls" फ़ाइल एक्सटेंशन
ल्यूक स्मिथ

28

इन अन्य माइम-प्रकारों में से एक का प्रयास करें (यहाँ से: http://filext.com/file-extension/CSV )

  • पाठ / अल्पविराम से अलग मान
  • पाठ / सीएसवी
  • आवेदन / सीएसवी
  • आवेदन / एक्सेल
  • आवेदन / vnd.ms-एक्सेल
  • आवेदन / vnd.msexcel

इसके अलावा, माइम-प्रकार संवेदनशील हो सकता है ...


15

जस्ट यूज लाइक दैट

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();

फ़ाइल का नाम डबल कोट में संलग्न करना मेरे लिए यह तय है जब क्लाइंट फ़ायरफ़ॉक्स है।
ग्राहम

1
यदि आप MVC नियंत्रक में इसका उपयोग कर रहे हैं, तो आपको return new EmptyResult()फ़ाइल नाम को छड़ी करने के लिए नियंत्रक विधि को समाप्त करना होगा । अन्यथा IE के रूप में फ़ाइल की कोशिश करेंगे और बचाने के लिए ActionName.htm
डीएवी

5

ASP.net MVC में, आप एक FileContentResultऔर Fileविधि का उपयोग कर सकते हैं :

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}

3

मैंने पाया है कि IE के साथ समस्या यह है कि यह रिटर्न डेटा को सूँघता है और अपना खुद का दिमाग बनाता है कि यह किस प्रकार का है, यह सोचता है कि इसे भेजा गया है। कई कारण होते हैं, जो इस कारण से होते हैं, जैसे कि टेक्स्ट फ़ाइलों के लिए हमेशा सेवर्स डायलॉग को खोलना क्योंकि आप डेटा ट्रैसफेरर्स के कम्प्रेशन का उपयोग कर रहे हैं। समाधान है (php कोड में) ......

header('X-Content-Type-Options: nosniff');

2

सामग्री प्रकार सेट करना और ऊपर वर्णित सामग्री स्वभाव अलग-अलग ब्राउज़रों के साथ बेतहाशा भिन्न परिणाम उत्पन्न करता है:

IE8: वांछित के रूप में SaveAs संवाद, और डिफ़ॉल्ट अनुप्रयोग के रूप में एक्सेल। 100% अच्छा है।

फ़ायरफ़ॉक्स: सेव्स डायलॉग दिखाता है, लेकिन फ़ायरफ़ॉक्स को पता नहीं है कि यह एक स्प्रेडशीट है। दृश्य स्टूडियो के साथ इसे खोलने का सुझाव देता है! 50% अच्छा है

क्रोम: संकेत पूरी तरह से नजरअंदाज कर रहे हैं। ब्राउज़र में CSV डेटा दिखाया गया है। 0% अच्छा है।

निश्चित रूप से इन सभी मामलों में मैं ब्राउज़रों का उल्लेख कर रहा हूं क्योंकि वे उस बॉक्स से बाहर आते हैं, जिसमें माइम / एप्लिकेशन रैपिंग का कोई अनुकूलन नहीं है।


यदि फ़ायरफ़ॉक्स आपको विजुअल स्टूडियो के साथ खोलना चाहता है, तो इसका मतलब है कि आप HTML निर्यात कर रहे हैं और सीएसवी नहीं।
मार्टिन

2014 में ऐसा नहीं हुआ, इसने मेरे लिए उन सभी में अच्छा काम किया।
माइककूल

कृपया "जैसा कि ऊपर वर्णित है"
xhienne

2

मैं 'myfilename.cvs' के सामने '/' वर्ण सम्मिलित करने का सुझाव देता हूं

Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.