multipartformdatacontent form data c# upload .net-4.5 multipartform-data dotnet-httpclient

data - C#HttpClient 4.5 multipart/upload de datos de formulario



multipart form data c# (4)

Aquí hay una muestra completa que funcionó para mí. El valor de boundary en la solicitud se agrega automáticamente por .NET.

var url = "http://localhost/api/v1/yourendpointhere"; var filePath = @"C:/path/to/image.jpg"; HttpClient httpClient = new HttpClient(); MultipartFormDataContent form = new MultipartFormDataContent(); FileStream fs = File.OpenRead(filePath); var streamContent = new StreamContent(fs); var imageContent = new ByteArrayContent(streamContent.ReadAsByteArrayAsync().Result); imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); form.Add(imageContent, "image", Path.GetFileName(filePath)); var response = httpClient.PostAsync(url, form).Result;

¿Alguien sabe cómo usar el HttpClient en .Net 4.5 con multipart/form-data carga de multipart/form-data ?

No pude encontrar ningún ejemplo en internet.


Este es un ejemplo de cómo publicar secuencias de cadenas y archivos con HTTPClient utilizando MultipartFormDataContent. La disposición del contenido y el tipo de contenido deben especificarse para cada HTTPContent:

Aquí está mi ejemplo. Espero eso ayude:

private static void Upload() { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("User-Agent", "CBS Brightcove API Service"); using (var content = new MultipartFormDataContent()) { var path = @"C:/B2BAssetRoot/files/596086/596086.1.mp4"; string assetName = Path.GetFileName(path); var request = new HTTPBrightCoveRequest() { Method = "create_video", Parameters = new Params() { CreateMultipleRenditions = "true", EncodeTo = EncodeTo.Mp4.ToString().ToUpper(), Token = "x8sLalfXacgn-4CzhTBm7uaCxVAPjvKqTf1oXpwLVYYoCkejZUsYtg..", Video = new Video() { Name = assetName, ReferenceId = Guid.NewGuid().ToString(), ShortDescription = assetName } } }; //Content-Disposition: form-data; name="json" var stringContent = new StringContent(JsonConvert.SerializeObject(request)); stringContent.Headers.Add("Content-Disposition", "form-data; name=/"json/""); content.Add(stringContent, "json"); FileStream fs = File.OpenRead(path); var streamContent = new StreamContent(fs); streamContent.Headers.Add("Content-Type", "application/octet-stream"); //Content-Disposition: form-data; name="file"; filename="C:/B2BAssetRoot/files/596090/596090.1.mp4"; streamContent.Headers.Add("Content-Disposition", "form-data; name=/"file/"; filename=/"" + Path.GetFileName(path) + "/""); content.Add(streamContent, "file", Path.GetFileName(path)); //content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); Task<HttpResponseMessage> message = client.PostAsync("http://api.brightcove.com/services/post", content); var input = message.Result.Content.ReadAsStringAsync(); Console.WriteLine(input.Result); Console.Read(); } } }


Funciona más o menos así (ejemplo usando un archivo de imagen / jpg):

async public Task<HttpResponseMessage> UploadImage(string url, byte[] ImageData) { var requestContent = new MultipartFormDataContent(); // here you can specify boundary if you need---^ var imageContent = new ByteArrayContent(ImageData); imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg"); requestContent.Add(imageContent, "image", "image.jpg"); return await client.PostAsync(url, requestContent); }

(Puede requestContent.Add() lo que desee, eche un vistazo al descendiente HttpContent para ver los tipos disponibles para pasar)

Cuando haya finalizado, encontrará el contenido de la respuesta dentro de HttpResponseMessage.Content que puede consumir con HttpContent.ReadAs*Async .


mi resultado se ve así:

public static async Task<string> Upload(byte[] image) { using (var client = new HttpClient()) { using (var content = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture))) { content.Add(new StreamContent(new MemoryStream(image)), "bilddatei", "upload.jpg"); using ( var message = await client.PostAsync("http://www.directupload.net/index.php?mode=upload", content)) { var input = await message.Content.ReadAsStringAsync(); return !string.IsNullOrWhiteSpace(input) ? Regex.Match(input, @"http:///w*/.directupload/.net/images//d*//w*/.[a-z]{3}").Value : null; } } } }