2010-06-18 15 views
15

पर फ़ाइल अपलोड करें मैं HttpWebRequest के साथ फ़ाइल भेजने की प्रक्रिया में हूं। मेरी फ़ाइल FileUpload UI से होगी। यहां मुझे HttpWebRequest के साथ स्ट्रीम भेजने के लिए फ़ाइल अपलोड को फ़ाइलस्ट्रीम में कनवर्ट करने की आवश्यकता है। मैं FileUpload को एक filestream में कैसे परिवर्तित करूं?फ़ाइलस्ट्रीम

+1

की जरूरत नहीं है कि आप वास्तव में क्या प्रयास कर रहे हैं डाल सकते हैं प्राप्त करने के लिए ? –

+1

मुझे फ़ाइल को एक डोमेन से दूसरे डोमेन में स्थानांतरित करने की आवश्यकता है। तो अपलोड की गई फ़ाइल प्राप्त करें और इसे HttpWebRequest –

उत्तर

20

के बाद से FileUpload.PostedFile.InputStream मुझे स्ट्रीम देता है, मैं इसे बाइट सरणी में बदलने के लिए निम्नलिखित कोड का इस्तेमाल किया

public static byte[] ReadFully(Stream input) 
{ 
    byte[] buffer = new byte[input.Length]; 
    //byte[] buffer = new byte[16 * 1024]; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     int read; 
     while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      ms.Write(buffer, 0, read); 
     } 
     return ms.ToArray(); 
    } 
} 
+0

नहीं जानता था PostFile में .putStream .. धन्यवाद। – lawphotog

3

आप फ़ाइल अपलोड को फ़ाइल अपलोड में परिवर्तित नहीं कर सकते हैं। हालांकि, आप उस FileUpload की PostFile प्रॉपर्टी से मेमोरीस्ट्रीम प्राप्त कर सकते हैं। फिर आप अपने HttpWebRequest को भरने के लिए उस मेमोरीस्ट्रीम का उपयोग कर सकते हैं।

+2

का उपयोग करके भेजें, क्या आप कृपया विस्तृत कर सकते हैं - संभवतः कोड उदाहरण या लिंक के साथ? – PeterX

+0

@ पीटरक्स: उदाहरण के लिए Extremeswank का जवाब देखें। – ErikHeemskerk

11

पाइप के लिए इनपुट आउटपुट धारा को सीधे धारा बेहतर हो सकता है:

inputStream.CopyTo(outputStream); 

इस तरह, आप पुन: संचरण से पहले पूरी फ़ाइल को स्मृति में कैश नहीं कर रहे हैं।

FileUpload fu; // Get the FileUpload object for the current connection here. 
HttpWebRequest hr; // Set up your outgoing connection here. 
using (Stream s = hr.GetRequestStream()) 
{ 
    fu.PostedFile.InputStream.CopyTo(s); 
    s.Flush(); 
} 

कि अधिक हो जाएगा:

FileUpload fu; // Get the FileUpload object. 
using (FileStream fs = File.OpenWrite("file.dat")) 
{ 
    fu.PostedFile.InputStream.CopyTo(fs); 
    fs.Flush(); 
} 

यदि आप किसी अन्य वेब अनुरोध करने के लिए सीधे यह लिखना चाहते थे, तो आप निम्न कर सकता है: उदाहरण के लिए, यहाँ आप इसे कैसे एक FileStream करने के बारे में होता है कुशल, क्योंकि आप मेमोरी या डिस्क पर पहले कैशिंग के बिना गंतव्य होस्ट पर सीधे इनपुट फ़ाइल स्ट्रीम करेंगे।

+0

एक बार जब आप PostFile तक पहुंच जाते हैं, तो फ़ाइल पहले ही पूरी तरह से ASP.NET द्वारा buffered किया गया है। इसे केवल 'HttpRequest.GetBufferlessInputStream() '(.NET 4 या उच्चतम) का उपयोग करके अवरुद्ध किया जा सकता है, लेकिन बदले में आपको पूरे अनुरोध निकाय को स्वयं पार्स करने की आवश्यकता होती है। – ErikHeemskerk

1

आप एक FileUpload फ़ाइल सीधे एक MemoryStream में FileBytes (टेक जर्क से सरलीकृत जवाब)

using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes)) 
{ 
    //do stuff 
} 

या का उपयोग करके अगर आप एक MemoryStream

byte[] bin = FileUpload1.FileBytes; 
संबंधित मुद्दे