2013-04-01 5 views
19

में HTTP POST का उपयोग कर फ़ाइलें भेजना मेरे पास एक छोटा सी # वेब एप्लिकेशन है। मैं सी # कोड कैसे प्राप्त कर सकता हूं जो उपयोगकर्ता को HTTP POST द्वारा फ़ाइलों को भेजने की अनुमति देता है। यह पाठ फ़ाइलों, छवि फ़ाइलों, एक्सेल, सीएसवी भेजने में सक्षम होना चाहिए , स्ट्रीम पाठक और सभी का उपयोग किये बिना दस्तावेज़ (सभी प्रकार की फाइलें)।सी #

+0

http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data –

+2

'मैं विभिन्न तरीकों की कोशिश की है लेकिन उनमें से कोई मुझे मदद की: यहाँ एक उदाहरण है। '- यदि आपने कुछ तरीकों को दिखाया है जो आपने कोशिश की है तो हम देख सकते हैं कि उनके साथ क्या गलत है। अभी, रचनात्मक चर्चा करना मुश्किल है। –

+1

डुप्लिकेट [सी # के साथ HTTP पोस्ट के माध्यम से एक फ़ाइल भेजें] (http://stackoverflow.com/questions/1131425/send-a-file-via-http-post-with-c-sharp) और कई अन्य। दिखाएं कि आपने क्या प्रयास किया है, और अपवित्र, कृपया इस बात पर विचार करें कि आप जो प्रश्न उठा रहे हैं वह साइट पर स्वागत है या सिर्फ एक डुप्लिकेट है। – CodeCaster

उत्तर

12

आप नीचे दिए गए कोड की कोशिश कर सकते हैं:

public void PostMultipleFiles(string url, string[] files) 
{ 
    string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x"); 
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary; 
    httpWebRequest.Method = "POST"; 
    httpWebRequest.KeepAlive = true; 
    httpWebRequest.Credentials = System.Net.CredentialCache.DefaultCredentials; 
    Stream memStream = new System.IO.MemoryStream(); 
    byte[] boundarybytes =System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary  +"\r\n"); 
    string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}"; 
    string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n"; 
    memStream.Write(boundarybytes, 0, boundarybytes.Length); 
    for (int i = 0; i < files.Length; i++) 
    { 
     string header = string.Format(headerTemplate, "file" + i, files[i]); 
     //string header = string.Format(headerTemplate, "uplTheFile", files[i]); 
     byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); 
     memStream.Write(headerbytes, 0, headerbytes.Length); 
     FileStream fileStream = new FileStream(files[i], FileMode.Open, 
     FileAccess.Read); 
     byte[] buffer = new byte[1024]; 
     int bytesRead = 0; 
     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      memStream.Write(buffer, 0, bytesRead); 
     } 
     memStream.Write(boundarybytes, 0, boundarybytes.Length); 
     fileStream.Close(); 
    } 
    httpWebRequest.ContentLength = memStream.Length; 
    Stream requestStream = httpWebRequest.GetRequestStream(); 
    memStream.Position = 0; 
    byte[] tempBuffer = new byte[memStream.Length]; 
    memStream.Read(tempBuffer, 0, tempBuffer.Length); 
    memStream.Close(); 
    requestStream.Write(tempBuffer, 0, tempBuffer.Length); 
    requestStream.Close(); 
    try 
    { 
     WebResponse webResponse = httpWebRequest.GetResponse(); 
     Stream stream = webResponse.GetResponseStream(); 
     StreamReader reader = new StreamReader(stream); 
     string var = reader.ReadToEnd(); 

    } 
    catch (Exception ex) 
    { 
     response.InnerHtml = ex.Message; 
    } 
    httpWebRequest = null; 
} 
+14

बस कोड की 50 लाइनों को डंप करना एक जवाब नहीं है। इस प्रश्न के कई जवाब हैं और इनमें से कई कोड (अधिक त्रुटि-सबूत भी) पहले से ही .NET प्रकारों में निर्मित हैं, जैसे WebClient और HttpClient। – CodeCaster

+0

क्या आप रिसीवर पेज से पुनर्प्राप्ति प्रक्रिया को समझा सकते हैं। –

+1

क्या आप यूआरएल का उदाहरण दे सकते हैं .. क्या इसमें फ़ाइल का नाम है? –

8

कोशिश इस

string fileToUpload = @"c:\user\test.txt"; 
string url = "http://example.com/upload"; 
using (var client = new WebClient()) 
{ 
byte[] result = client.UploadFile(url, fileToUpload); 
string responseAsString = Encoding.Default.GetString(result); 
} 
9

.NET 4.5 (या .NET 4.0 NuGet से Microsoft.Net.Http पैकेज जोड़कर) वहाँ करने के लिए एक आसान तरीका है का उपयोग करना फॉर्म अनुरोध अनुकरण करें।

private System.IO.Stream Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes) 
{ 
    HttpContent stringContent = new StringContent(paramString); 
    HttpContent fileStreamContent = new StreamContent(paramFileStream); 
    HttpContent bytesContent = new ByteArrayContent(paramFileBytes); 
    using (var client = new HttpClient()) 
    using (var formData = new MultipartFormDataContent()) 
    { 
     formData.Add(stringContent, "param1", "param1"); 
     formData.Add(fileStreamContent, "file1", "file1"); 
     formData.Add(bytesContent, "file2", "file2"); 
     var response = client.PostAsync(actionUrl, formData).Result; 
     if (!response.IsSuccessStatusCode) 
     { 
      return null; 
     } 
     return response.Content.ReadAsStreamAsync().Result; 
    } 
} 
+0

क्या बहु-भाग फॉर्म-डेटा हमेशा उपयोग करना अनिवार्य है? – Abhijeet