Net5后台文件上传

发布时间 2023-11-05 00:18:46作者: peng_boke

前言

本来文件上传没有什么难的,但是公司的文件上传又封了一层,所以一直调不同,验证不通过,好在最后解决了。

1.调用要求

需要再Header上加俩个字段

image-20230920145110284

如果使用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可以添加文件内容、字段名、文件名。

image-20230920145637732

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;
    }
}

创作不易,如果感觉帮助到你了,还请多多支持,我会继续努力。

image-20230920150058033