2010-11-24 22 views
20

मैं अपनी वेबसाइट से एक छवि अपलोड कर दिया है जब मैं 2 काम करने होंगे:धारा दो बार पढ़ना?

  1. छवि आयाम पढ़

पहली बात मैं कर पढ़ रही है डेटाबेस के लिए छवि को बचाने के एक छवि वस्तु में छवि धारा है, तो जैसे:

var file = Request.Files["logo"]; 

Image FullsizeImage = Image.FromStream(file.InputStream); 

अगली बात मैं कर डेटाबेस के लिए "फाइल" वस्तु को बचाने के लिए है (एसक्यूएल को LINQ)। लेकिन, जब मैं डेटाबेस के लिए छवि को बचाने की कोशिश, फ़ाइल से धारा यह धारा के अंत में स्थिति है, और ऐसा लगता है कोई डेटा मौजूद है।

मैं जानता हूँ कि मैं धारा रीसेट और उसे वापस स्थिति 0 में somwhow चाहिए, लेकिन मुझे लगता है कि सबसे effiecent और सही तरीका कैसे करते हो? ...

file.InputStream.Position = 0; 

संभालने धारा की मांग का समर्थन करता है:

उत्तर

32

खैर, सबसे आसान तरीका है। क्योंकि यह धारा के लिए एक संदर्भ को बरकरार रखा है जाएगा - हालांकि, यही कारण है कि अगर आप सावधान नहीं कर रहे हैं Image को दिलचस्प बातें कर सकते हैं।

आप एक बाइट सरणी में डेटा लोड हो रहा, और फिर इसे से दो अलग-अलग MemoryStream वस्तुओं बनाने अगर आप अभी भी करने की जरूरत बंद सबसे अच्छा हो सकता है। यदि आप .NET 4 का उपयोग कर रहे हैं, तो एक स्ट्रीम को दूसरे में कॉपी करना आसान है:

MemoryStream ms = new MemoryStream(); 
Request.Files["logo"].InputStream.CopyTo(ms); 
byte[] data = ms.ToArray(); 
+1

क्या आपका मतलब फ़ाइल है। इनपुटस्ट्रीम.पॉशन = 0; ? – danielovich

+1

@danielovich: हाँ, मैं था - माफ करना, तय की। –

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