पर लिखने के बारे में कुछ प्रश्न मैं एएसपी.NET HttpHandler के साथ परीक्षण स्ट्रीम पर सीधे लिखने वाली फ़ाइल डाउनलोड करने के लिए परीक्षण कर रहा हूं, और मुझे यह सुनिश्चित नहीं है कि मैं इसे कैसे कर रहा हूं। यह एक उदाहरण विधि, भविष्य में फ़ाइल डेटाबेस में एक बूँद में संग्रहित किया जा सकता है:एएसपी.NET प्रतिक्रिया धारा
public void GetFile(HttpResponse response)
{
String fileName = "example.iso";
response.ClearHeaders();
response.ClearContent();
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), fileName), FileMode.Open))
{
Byte[] buffer = new Byte[4096];
Int32 readed = 0;
while ((readed = fs.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, readed);
response.Flush();
}
}
}
लेकिन, अगर यह सही है या वहाँ यह करने के लिए एक बेहतर तरीका है मैं यकीन नहीं है। मेरे प्रश्न हैं:
- जब मैं ब्राउज़र के साथ यूआरएल खोलते हैं, तो प्रतीत होता है "Save File" संवाद ... लेकिन ऐसा लगता है सर्वर पहले से ही शुरू कर दिया है की तरह धारा में डेटा पुश करने के लिए इससे पहले कि मैं क्लिक करें "सहेजें ", क्या यह सामान्य है?
- यदि मैं ब्राउज़र के साथ यूआरएल खोलता हूं, तो मैं "प्रतिक्रिया.फ्लश()" रेखा को हटा देता हूं, ... मैं देखता हूं कि वेब सर्वर डेटा को कैसे दबा रहा है लेकिन "फ़ाइल सहेजें" संवाद नहीं आया है, (या कम से कम उचित समय में नहीं) क्यों?
- जब मैं WebRequest ऑब्जेक्ट के साथ यूआरएल खोलता हूं, तो मुझे लगता है कि HttpResponse.ContentLength "-1" है, हालांकि मैं स्ट्रीम पढ़ सकता हूं और फ़ाइल प्राप्त कर सकता हूं। -1 का अर्थ क्या है? HttpResponse.ContentLength कब प्रतिक्रिया की लंबाई दिखाने जा रहा है? उदाहरण के लिए, मेरे पास एक विधि है जो एक बाइनरी स्ट्रीम के रूप में डिफ्लेट के साथ मिश्रित एक बड़ा एक्सएमएल पुनर्प्राप्त करता है, लेकिन उस स्थिति में ... जब मैं इसे WebRequest के साथ एक्सेस करता हूं, तो HttpResponse में मैं वास्तव में स्ट्रीम की लंबाई के साथ ContentLength देख सकता हूं , क्यूं कर?
- बाइट [] सरणी के लिए इष्टतम लंबाई क्या है जिसे मैं वेब सर्वर में इष्टतम प्रदर्शन के लिए बफर के रूप में उपयोग करता हूं? मैंने पढ़ा है कि 4 के और 8 के बीच है ... लेकिन सही निर्णय लेने के लिए मुझे किन कारकों पर विचार करना चाहिए।
- क्या यह विधि आईआईएस या क्लाइंट मेमोरी उपयोग को फूटती है? या यह वास्तव में स्थानांतरण को सही ढंग से बफर कर रहा है?
इतने सारे सवालों के लिए खेद है, मैं बहुत वेब विकास में नए कर रहा हूँ: पी
चीयर्स।
आपको यहां Boilerplate HttpHandler कार्यान्वयन को भी देखना चाहिए (http://haacked.com/archive/2005/03/17/AnAbstractBoilerplateHttpHandler.aspx) और यहां (http://www.hanselman.com /blog/PermaLink,guid,5c59d662-b250-4eb2-96e4-f274295bd52e.aspx)। – R0MANARMY
सीखने का आपका तरीका सराहना की है। बढ़ा चल । –
यह काम करेगा: [http://stackoverflow.com/questions/3362849/outofmemoryexception-when-send-big-file-500mb-using-filestream-aspnet][1] [ 1]: http://stackoverflow.com/questions/3362849/outofmemoryexception-when-send-big-file-500mb-using-filestream-aspnet –