C# HttpClient 上传带进度
在Httpclient 上传文件时 需要显示进度,需要添加 ProgressMessageHandler 在NuGet中添加 引用
Microsoft.AspNet.WebApi.Client 就因为这个引用找了好久,在这做个记录以后不迷路 。。。。
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Handlers;
using System.Threading.Tasks;
namespace UpLoadFile
{
public class HttpHelper
{
public async Task<ValueTuple<bool,string>> Upload(string url,List<string> filePath,Dictionary<string,string> values)
{
HttpClientHandler handler = new HttpClientHandler();
ProgressMessageHandler progressMessageHandler = new ProgressMessageHandler(handler);
progressMessageHandler.HttpSendProgress += ProgressMessageHandler_HttpSendProgress;
using (HttpClient httpClient = new HttpClient(progressMessageHandler))
{
using (var multipartFormData = new MultipartFormDataContent())
{
if (values.Count > 0)
{
foreach (var item in values)
{
multipartFormData.Add(new StringContent(item.Value), item.Key);
}
}
foreach (var file in filePath)
{
var content = File.ReadAllBytes(file);
FileInfo fileInfo=new FileInfo(file);
multipartFormData.Add(new ByteArrayContent(content), "files", fileInfo.Name);
}
var response = await httpClient.PostAsync(url, multipartFormData);
if (response.IsSuccessStatusCode)
{
var data = await response.Content.ReadAsStringAsync();
return (true, data);
}
else
{
var data = await response.Content.ReadAsStringAsync();
return (false, data);
}
}
}
}
private void ProgressMessageHandler_HttpSendProgress(object sender, HttpProgressEventArgs e)
{
Console.WriteLine(e.ProgressPercentage + "%");
}
}
}