简体   繁体   中英

How to send image in HttpClient SendRequestAsync

I am using Windows.Web.Http instead of System and I am trying to send an image.

My sample code:

    Dictionary<string, object> requestDictionary;
    HttpClient httpClient = new HttpClient();
    HttpRequestMessage re = new HttpRequestMessage();
    HttpResponseMessage response;
    re.Method =  HttpMethod.Post;
    re.RequestUri = url;
    string content_type = "application/json";
    string req_data = JsonConvert.SerializeObject(requestDictionary);

    re.Content = new HttpStringContent(req_data, UnicodeEncoding.Utf8, content_type);

    response = await httpClient.SendRequestAsync(re);
    response.EnsureSuccessStatusCode();

    var responseString = await response.Content.ReadAsStringAsync();

    httpClient.Dispose();
    httpClient=null;

In this case my requestDictionary will be some thing like

    requestDictionary.Add("Image", filename);
    requestDictionary.Add("description", some_description);

Someone please help me to achieve this.

By using .Net 4.5 (or by adding the Microsoft.Net.Http package from NuGet) there is an easier way to do this:

private string Upload(string actionUrl, string paramString, byte[] paramFileBytes)
{
    HttpContent stringContent = new StringContent(paramString);
    HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
    using (var client = new HttpClient())
    using (var formData = new MultipartFormDataContent())
    {
        formData.Add(stringContent, "paramter");
        formData.Add(bytesContent, "image");
        var response = client.PostAsync(actionUrl, formData).Result;
        if (!response.IsSuccessStatusCode)
        {
            return null;
        }
        return response.Content.ReadAsStringAsync().Result;
    }
} 

If you prefer to use a stream instead of a byte-array you can easily do this, by just using new StreamContent() instead of new ByteArrayContent() .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM