C# 使用HttpClient上傳文件并附帶其他參數(shù)的步驟
HttpClient和MultipartFormDataContent(傳送門)最低適用于.NET Framework 4.5版本
發(fā)送端代碼
using (HttpClient client = new HttpClient())
{
var content = new MultipartFormDataContent();
//添加字符串參數(shù),參數(shù)名為qq
content.Add(new StringContent("123456"), "qq");
string path = Path.Combine(System.Environment.CurrentDirectory, "1.png");
//添加文件參數(shù),參數(shù)名為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();
});
}
注意:如果要通過參數(shù)形式接收數(shù)據(jù),需要確保參數(shù)名稱和上面發(fā)送請(qǐng)求中設(shè)置的名稱一致,否則無法自動(dòng)綁定到參數(shù)中,且需要給參數(shù)加上[FromForm]的標(biāo)記。
使用model對(duì)象接收數(shù)據(jù)
public class SaveFileModel
{
public string qq { get; set; }
public IFormFile File { get; set; }
}
public async Task<JsonResult> SaveFile([FromForm]SaveFileModel model)
{
//......
}
使用HttpContext從請(qǐng)求的Form中獲取數(shù)據(jù)
public async Task<JsonResult> SaveFile()
{
return await Task.Run(() =>
{
var files = HttpContext.Request.Form.Files;
var qq = HttpContext.Request.Form["qq"];
//......
});
}
總結(jié)
這個(gè)問題是在寫一個(gè).Net Core項(xiàng)目時(shí)遇到的,以前在.Net Framework 4.0的時(shí)候,使用string拼接表單中文件的內(nèi)容,到處都是boundary分界線。用MultipartFormDataContent來進(jìn)行表單提交上傳文件是它內(nèi)部幫我們拼接了這個(gè)復(fù)雜的內(nèi)容。(可以用Fiddler抓一下請(qǐng)求看看)emm...我去找一下當(dāng)初是怎么弄的文件上傳,如果有再更新此文。
以上就是C# 使用HttpClient上傳文件并附帶其他參數(shù)的步驟的詳細(xì)內(nèi)容,更多關(guān)于C# 使用HttpClient上傳文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 三種方式實(shí)現(xiàn)Socket數(shù)據(jù)接收
這篇文章主要給大家分享三種實(shí)現(xiàn)C# 實(shí)現(xiàn)Socket數(shù)據(jù)接收的方式,接下倆小編就來為大家詳細(xì)介紹吧,需要的朋友可以參考一下2021-10-10
C#實(shí)現(xiàn)rabbitmq 延遲隊(duì)列功能實(shí)例代碼
本篇文章主要介紹了C#實(shí)現(xiàn)rabbitmq 延遲隊(duì)列功能實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
c#進(jìn)度條 progressBar 使用方法的小例子
1、創(chuàng)建進(jìn)度條窗口2、在其他窗口中調(diào)用方法ShowProcess(int percent,string message)2013-04-04
c#實(shí)現(xiàn)最簡(jiǎn)潔的快速排序(你絕對(duì)可以看懂)
這篇文章主要給大家介紹了關(guān)于利用c#實(shí)現(xiàn)如何最簡(jiǎn)潔的快速排序,實(shí)現(xiàn)的方法你絕對(duì)可以看懂,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
c# 9.0新特性nint和Pattern matching的使用方法
這篇文章主要介紹了c# 9.0新特性nint和Pattern matching的使用方法,文中講解非常細(xì)致,幫助你更好的學(xué)習(xí)c# 9.0,有需求的朋友可以參考下2020-06-06
C#實(shí)現(xiàn)排列組合算法完整實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)排列組合算法的完整實(shí)例,文中實(shí)例主要展示了排列循環(huán)方法和排列堆棧方法,需要的朋友可以參考下2014-09-09
C#使用ZXing實(shí)現(xiàn)二維碼和條形碼的生成
這篇文章主要為大家詳細(xì)介紹了C#如何使用ZXing實(shí)現(xiàn)二維碼和條形碼的生成與識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11

