前言
本来文件上传没有什么难的,但是公司的文件上传又封了一层,所以一直调不同,验证不通过,好在最后解决了。
1.调用要求
需要再Header上加俩个字段
如果使用DefaultRequestHeaders强制加"Content-Type":"multipart/form-data"就会报错,所以使用
var content = new MultipartFormDataContent();
var fileContent = new StreamContent(stream);
fileContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("multipart/form-data");
content.Add(fileContent,"file",Path.GetFileName(filePath));
但是可以使用DefaultRequestHeaders设置其他header,需要注意的是MultipartFormDataContent可以添加文件内容、字段名、文件名。
2.源码
代码做了修改,主要是设置header,传入formdata的参数
public async static Task<object> UploadFileAsync(string url, string filePath, string para1, string para2, string para3)
{
using (var stream = new FileStream(filePath, FileMode.Open))
{
var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient();
var content = new MultipartFormDataContent();
var fileContent = new StreamContent(stream);
fileContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("multipart/form-data");
content.Add(fileContent,"file",Path.GetFileName(filePath));
client.DefaultRequestHeaders.Add("", "");
var formData = new Dictionary<string, string>
{
["para1"] = para1,
["para2"] = para2,
["para3"] = para3,
};
foreach (var kvp in formData)
{
content.Add(new StringContent(kvp.Value), kvp.Key);
}
var response = await client.PostAsync(url, content);
var resultContent = await response.Content.ReadFromJsonAsync<object>();
return resultContent;
}
}
创作不易,如果感觉帮助到你了,还请多多支持,我会继续努力。