2009-07-02 13 views
25

मुझे कुछ रिपोर्ट लिखने की आवश्यकता है और फिर उपयोगकर्ता ने उसे अपनी स्थानीय मशीन में सहेजने के लिए कहा है। पिछली बार मैंने ऐसा किया था, मैंने वेबसर्वर को एक फाइल लिखी और फिर इसे Response ऑब्जेक्ट के माध्यम से क्लाइंट को भेज दिया।सी # Asp.net क्लाइंट को फ़ाइल

वेबसर्वर

TextWriter tw = new StreamWriter(filePath); 

पर बनाने के लिए ग्राहक

page.Response.WriteFile(path); 

सवाल यह है कि करने के लिए भेजने के लिए, वहाँ वेब सर्वर पर भौतिक फ़ाइल के लेखन छोड़ सकते हैं और सही से जाने के लिए कोई तरीका है एक ऑब्जेक्ट जो प्रतिक्रिया के लिए दस्तावेज़ का प्रतिनिधित्व करता है?

उत्तर

25

आप इस

Response.ContentType = "text/plain"; 
Response.OutputStream.Write(buffer, 0, buffer.Length); 
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt"); 

निश्चित रूप से यह काम करता है अगर तुम एक पाठ फ़ाइल लिखना चाहते हैं की तरह Response.ContentType इस्तेमाल कर सकते हैं। यदि आप एक .doc लिखना चाहते हैं उदाहरण के लिए आप ContentType को "एप्लिकेशन/msword" आदि में बदलते हैं ...

+0

यह कोड मेरे ब्राउज़र को लिखता है। मुझे कोई संकेत नहीं मिला। आईआरईपोर्ट आरपीटी = नया ContxReport(); स्ट्रिंग रिपोर्ट = rpt.makeReport(); ASCIIEncoding एन्कोडिंग = नया ASCIIEncoding(); बाइट [] एन्कोडेड रिपोर्ट = एन्कोडिंग। गेटबाइट्स (रिपोर्ट); प्रतिक्रिया।ContentType = "टेक्स्ट/सादा"; Response.OutputStream.Write (एन्कोडेड रिपोर्ट, 0, एन्कोडेड रिपोर्ट। लम्बाई); Response.AddHeader ("सामग्री-विस्थापन", "इनलाइन; फ़ाइल नाम = shit.csv"); Response.End(); – jim

+1

इसके अलावा, आपको लिखने से पहले सभी शीर्षलेख सेट करना चाहिए। – Talljoe

+1

*** बफर *** क्या है? इस विशेष उदाहरण में – Kiquenet

16

आप कर सकते हैं।

इस प्रयास करें:

Table oTable = new Table(); 
//Add data to table. 

Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls""); 
Response.Charset = ""; 
this.EnableViewState = false; 
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter); 
0Table.RenderControl(oHtmlTextWriter); 
Response.Write(oStringWriter.ToString()); 
Response.End(); 

इस खोलने के लिए या Test.xls फाइल को सेव करने के लिए संकेत दे देंगे। इसी प्रकार आप तालिका के स्थान पर अन्य एएसपी.NET ऑब्जेक्ट्स प्रदान कर सकते हैं।

+0

आपको स्ट्रिंगवाइटर बनाने के बजाय Response.Output का उपयोग करने में सक्षम होना चाहिए। – Talljoe

+0

मेरे पास 2 प्रश्न हैं। 1) क्या वह फाइल सक्षम हो जाएगी। और 2) IDM आदि जैसे डाउनलोड मैनेजर का उपयोग करते हुए एकाधिक कनेक्शन संभव हैं ..? – shashwat

+2

@ShashwatTripathi मुझे यकीन नहीं है। यह कोड का एक टुकड़ा था जिसे मैंने बहुत पहले इस्तेमाल किया था। आईएमएचओ, यह फिर से शुरू या एकाधिक डाउनलोड कनेक्शन का समर्थन नहीं करेगा। –

5

हां।

page.Response.WriteFile(yourData, 0, yourData.Length); 
+0

मेरे पास 2 प्रश्न हैं। 1) क्या वह फाइल सक्षम हो जाएगी। और 2) IDM आदि जैसे डाउनलोड मैनेजर का उपयोग करते हुए एकाधिक कनेक्शन संभव हैं ..? – shashwat

5

सवाल का सटीक उत्तर कैसे आप अपनी रिपोर्ट का आयोजन किया है पर निर्भर करता है (अर्थात क्या "वस्तु" आप की बात कर रहे हैं जाता है)। यदि आपके पास एक स्ट्रिंग है, तो आप इसे लिखने के लिए Response.Write का उपयोग कर सकते हैं। यदि आपको टेक्स्टवाइटर की आवश्यकता है, तो Response.Output वह है जो आप चाहते हैं - इस तरह आप डिस्क पर लेखन छोड़ सकते हैं और फिर WriteFile का उपयोग कर सकते हैं। साथ ही, यदि आपकी सामग्री द्विआधारी हो गई है, तो आप इसके लिए Response.OutputStream का उपयोग कर सकते हैं।

यदि आप उपयोगकर्ता को एक सेव फ़ाइल संवाद देखना चाहते हैं तो आप Response.AddHeader ("Content-Disposition", "attachment") भी सेट करना चाहेंगे। हालांकि, सामग्री-विस्थापन को आवश्यक रूप से सम्मानित नहीं किया जाता है, इसलिए उपयोगकर्ता को अभी भी ब्राउज़र में सीधे रिपोर्ट खोला जा सकता है। वास्तविक सामग्री को आउटपुट करने से पहले हेडर सेट करना याद रखें!

इसके अलावा, रिपोर्ट के प्रारूप के आधार पर, आप टेक्स्ट/सादा, टेक्स्ट/सीएसवी या जो कुछ भी हो, उसके लिए Response.ContentType को उचित सेट करना चाह सकते हैं। सही माइम प्रकार the IANA site पर सूचीबद्ध हैं।

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