Enviar archivos usando HTTP POST en c #

Tengo una pequeña aplicación web C #. Cómo puedo obtener el código c # que permite al usuario enviar archivos por HTTP POST. Debe poder enviar archivos de texto, imágenes, excel, csv, doc (todo tipo de archivos) sin usar lector de flujo y todo.

Puedes probar el siguiente código:

  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; } 

prueba esto

 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); } 

Usando .NET 4.5 (o .NET 4.0 agregando el paquete Microsoft.Net.Http desde NuGet) hay una manera más fácil de simular solicitudes de formularios. Aquí hay un ejemplo:

 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; } }