C#使用HttpClient上传文件并附带其他参数

本文介绍如何使用.NET Framework 4.5版本的HttpClient和MultipartFormDataContent进行文件上传。通过示例代码展示了发送端如何组合字符串和文件参数,以及接收端如何处理这些数据,包括直接通过参数接收和使用HttpContext从请求的Form中获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpClientMultipartFormDataContent传送门)最低适用于.NET Framework 4.5版本

发送端代码

using (HttpClient client = new HttpClient())
{
    var content = new MultipartFormDataContent();
    //添加字符串参数,参数名为qq
    content.Add(new StringContent("123456"), "qq");

    string path = Path.Combine(System.Environment.CurrentDirectory, "1.png");
    //添加文件参数,参数名为files,文件名为123.png
    content.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(path)), "file", "123.png");

    var requestUri = "http://192.168.1.108:56852/api/Test/SaveFile";
    var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result;

    Console.WriteLine(result);
}

接收端代码

[HttpPost]
public async Task<JsonResult> SaveFile([FromForm]string qq, IFormFile file)
{
    return await Task.Run(() =>
    {
        try
        {
            //保存文件到本地
            var filefullPath = Path.Combine(Directory.GetCurrentDirectory(), file.FileName);
            using (FileStream fs = new FileStream(filefullPath, FileMode.Create))
            {
                file.CopyTo(fs);
                fs.Flush();
            }
        }
        catch (Exception ex)
        {
            return Fail(file.FileName + "---" + ex.Message);
        }
        return Success();
    });
}

注意:如果要通过参数形式接收数据,需要确保参数名称和上面发送请求中设置的名称一致,否则无法自动绑定到参数中,且需要给参数加上[FromForm]的标记。

使用model对象接收数据
public class SaveFileModel
{
    public string qq { get; set; }
    public IFormFile File { get; set; }
}
public async Task<JsonResult> SaveFile([FromForm]SaveFileModel model)
{
    //......
}
使用HttpContext从请求的Form中获取数据
public async Task<JsonResult> SaveFile()
{
    return await Task.Run(() =>
    {
        var files = HttpContext.Request.Form.Files;
        var qq = HttpContext.Request.Form["qq"];
        //......
    });
}
总结

这个问题是在写一个.Net Core项目时遇到的,以前在.Net Framework 4.0的时候,使用string拼接表单中文件的内容,到处都是boundary分界线。用MultipartFormDataContent来进行表单提交上传文件是它内部帮我们拼接了这个复杂的内容。(可以用Fiddler抓一下请求看看)emm...我去找一下当初是怎么弄的文件上传,如果有再更新此文。

转载于:https://www.cnblogs.com/cplemom/p/11264040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值