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...我去找一下当初是怎么弄的文件上传,如果有再更新此文。

C#使用HttpClient上传文件并附带其他参数的更多相关文章

  1. FormData上传文件同时附带其他参数

    前端js代码: function fileSubmit() { var formData = new FormData(); formData.append(].files[]); var type ...

  2. php上传文件涉及到的参数

          php上传文件涉及到的参数: 几个参数调整: 0:文件上传时存放文件的临时目录.必须是 PHP 进程所有者用户可写的目录.如果未指定则 PHP 使用系统默认值 php.ini文件中uplo ...

  3. [转]httpclient 上传文件、下载文件

    用httpclient4.3 post方式推送文件到服务端  准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/** * 上传 ...

  4. Java使用HttpClient上传文件

    Java可以使用HttpClient发送Http请求.上传文件等,非常的方便 Maven <dependency> <groupId>org.apache.httpcompon ...

  5. HttpClient上传文件

    1.上传客户端代码: public static void upload() { CloseableHttpClient httpclient = HttpClients.createDefault( ...

  6. Android 网络编程--上传文件及相应的参数到服务器

    之前一直在做SiteCheck的项目,所用到的知识大部分都涉及到网络编程方面,所以现在有时间先把它的使用方法及一些注意事项记录下来.在这里我用两种例子让大家了解它的使用方法: (1)上传图片及相应参数 ...

  7. 上传文件表单file,限制上传文件类型的方法--参数accept

    我们使用<input type="file" />来上传文件,但是当你只想要上传某种格式的文件,比如说(jpg)文件时.可以通过accept来限制. <form& ...

  8. HttpClient 上传文件

    /// <summary> /// 发送post请求 /// </summary> /// <param name="filePath">文件路 ...

  9. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

随机推荐

  1. Redis深度历险,全面解析Redis14个核心知识点

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取. 传送门: ...

  2. Python爬取十四万条书籍信息告诉你哪本网络小说更好看

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TM0831 PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. python3 对list对象的增删改查

    class peoples: people_list =[] class people: name='' age=-1 def __init__(self,name,age): self.name = ...

  4. ZooKeeper安装、配置和使用

    Zookeeper的概述: ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, ...

  5. 同样是高并发,QQ/微博/12306的架构难度一样吗?

    开篇 同一个用户并发扣款时,有一定概率出现数据不一致,可以使用CAS乐观锁的方式,在不降低吞吐量,保证数据的一致性: UPDATE t_yue SET money=$new_money WHERE u ...

  6. Docker基础概念与安装

    Docker是什么? Docker最初是dotCloud公司的创始人Solomon Hyks在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以 ...

  7. mysql里字符集的配置

    [client]default-character-set=utf8[mysqld]character-set-server = utf8[mysql]default-character-set=ut ...

  8. 树型DP(2)

    声明 https://blog.csdn.net/no1_terminator/article/details/77824790 参考课件和讲授来自Accelerator 找树的直径 树的直径定义为一 ...

  9. c# 第27节 结构、枚举

    本节内容: 1:为什么要有结构 2:结构体的声明和使用 3:为什么要有枚举.常识大考验 4:枚举的声明 5:枚举的使用 6:枚举的各种转换 1:为什么要有结构 2:结构体的声明和使用 结构的声明位置: ...

  10. pyquery解析库

    这一篇整理一下pyquery这个解析库.还是菜,若有错误的地方,欢迎大家随时指正.......(come on.......) pyquery:是一个css选择器,再使用时,也需要传入HTML文本来初 ...