C# HttpClient 4.5 multipart/form-data upload

前端 未结 10 1068
逝去的感伤
逝去的感伤 2020-11-22 05:39

Does anyone know how to use the HttpClient in .Net 4.5 with multipart/form-data upload?

I couldn\'t find any examples on the internet.

10条回答
  •  时光取名叫无心
    2020-11-22 05:57

    Example with preloader Dotnet 3.0 Core

    ProgressMessageHandler processMessageHander = new ProgressMessageHandler();
    
    processMessageHander.HttpSendProgress += (s, e) =>
    {
        if (e.ProgressPercentage > 0)
        {
            ProgressPercentage = e.ProgressPercentage;
            TotalBytes = e.TotalBytes;
            progressAction?.Invoke(progressFile);
        }
    };
    
    using (var client = HttpClientFactory.Create(processMessageHander))
    {
        var uri = new Uri(transfer.BackEndUrl);
        client.DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue("Bearer", AccessToken);
    
        using (MultipartFormDataContent multiForm = new MultipartFormDataContent())
        {
            multiForm.Add(new StringContent(FileId), "FileId");
            multiForm.Add(new StringContent(FileName), "FileName");
            string hash = "";
    
            using (MD5 md5Hash = MD5.Create())
            {
                var sb = new StringBuilder();
                foreach (var data in md5Hash.ComputeHash(File.ReadAllBytes(FullName)))
                {
                    sb.Append(data.ToString("x2"));
                }
                hash = result.ToString();
            }
            multiForm.Add(new StringContent(hash), "Hash");
    
            using (FileStream fs = File.OpenRead(FullName))
            {
                multiForm.Add(new StreamContent(fs), "file", Path.GetFileName(FullName));
                var response = await client.PostAsync(uri, multiForm);
                progressFile.Message = response.ToString();
    
                if (response.IsSuccessStatusCode) {
                    progressAction?.Invoke(progressFile);
                } else {
                    progressErrorAction?.Invoke(progressFile);
                }
                response.EnsureSuccessStatusCode();
            }
        }
    }
    

提交回复
热议问题