HttpPostedFile से बाइट सरणी कैसे बनाएं


155

मैं एक छवि घटक का उपयोग कर रहा हूं जिसमें एक FromBinary विधि है। आश्चर्य है कि मैं अपनी इनपुट स्ट्रीम को बाइट सरणी में कैसे परिवर्तित करूं

HttpPostedFile file = context.Request.Files[0];
byte[] buffer = new byte[file.ContentLength];
file.InputStream.Read(buffer, 0, file.ContentLength);

ImageElement image = ImageElement.FromBinary(byteArray);

हम किसी अन्य .aspx पृष्ठ में फ़ाइल कैसे पोस्ट कर रहे हैं?
शिवानी

क्या यह लाइन फ़ाइल नहीं है। InputStream.Read (बफर, 0, फ़ाइल। कंटेंट लय); इनपुट स्ट्रीम से बाइट्स के साथ बफर भरें? नीचे दिए गए उत्तर में @Wolfwyrd द्वारा बताए अनुसार हमें बाइनरीरएडर.हेडबाइट्स (...) का उपयोग क्यों करना चाहिए ? चित्र नहीं होगा। FromBinary (बफर); समस्या का समाधान कीजिए?
श्रीनिधि शंकर

जवाबों:


290

बाइनरी सरणी का उपयोग स्ट्रीम से बाइट सरणी को वापस करने के लिए करें जैसे:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

1
जैसा कि नीचे उल्लेख किया गया है जेफ, बी.रीडबाइट्स (फ़ाइल। InputStream.Length); बाइट होना चाहिए [] binData = b.ReadBytes (file.ContentLength); जैसा कि .Length एक लंबी है जबकि ReadBytes एक int की उम्मीद करता है।
स्पॉन्जबॉय

बाइनरीरीडर को बंद करना याद रखें।
क्रिस ड्वायर

एक आकर्षण की तरह काम करते हैं। इस सरल समाधान के लिए धन्यवाद (जेफ, स्पोंगेबॉय और क्रिस की टिप्पणियों के साथ)!
डेविड

29
बाइनरी रीडर को बंद नहीं करना पड़ता है, क्योंकि एक प्रयोग है जो स्वचालित रूप से पाठक को निपटान पर बंद कर रहा है
BeardinaSuit

1
इस पर कोई विचार .docx फ़ाइल के लिए काम क्यों नहीं करेगा? stackoverflow.com/questions/19232932/…
wilsjd


12

यदि आपकी फ़ाइल InputStream.Position स्ट्रीम के अंत में सेट है, तो यह काम नहीं करेगा। मेरी अतिरिक्त लाइनें:

Stream stream = file.InputStream;
stream.Position = 0;

3

आपके प्रश्न में, बफर और बाइटअरे दोनों बाइट [] लगते हैं। इसलिए:

ImageElement image = ImageElement.FromBinary(buffer);

2

stream.copyto से पहले, आपको stream.position को 0 पर रीसेट करना होगा; तब यह ठीक काम करता है।


2

यदि आपके वेब पेज v2 का उपयोग कर रहे हैं छवियों के लिए WebImage क्लास का उपयोग करें

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.