C#.NET使用multipart/form-data方式上传文件及其他数据

news/2024/12/20 4:54:55/

在这里插入图片描述

请求发起

.NET Framework 3.5 版

/// <summary>/// 使用multipart/form-data方式上传文件及其他数据/// </summary>/// <param name="headers">请求头参数</param>/// <param name="nameValueCollection">键值对参数</param>/// <param name="fileCollection">文件参数:参数名,文件路径</param>/// <returns>接口返回结果</returns>public static string PostMultipartFormData(string url, Dictionary<string, string> headers, NameValueCollection nameValueCollection, NameValueCollection fileCollection){using (var client = new HttpClient()){foreach (var item in headers){client.DefaultRequestHeaders.Add(item.Key, item.Value);}using (var content = new MultipartFormDataContent()){// 键值对参数string[] allKeys = nameValueCollection.AllKeys;foreach (string key in allKeys){var dataContent = new ByteArrayContent(Encoding.UTF8.GetBytes(nameValueCollection[key]));dataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data"){Name = key};content.Add(dataContent);}//处理文件内容string[] fileKeys = fileCollection.AllKeys;foreach (string key in fileKeys){byte[] bmpBytes = File.ReadAllBytes(fileCollection[key]);var fileContent = new ByteArrayContent(bmpBytes);//填充文件字节fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data"){Name = key,FileName = Path.GetFileName(fileCollection[key])};content.Add(fileContent);}var result = client.PostAsync(url, content).Result;//post请求string data = result.Content.ReadAsStringAsync().Result;return data;//返回操作结果}}}

.NET Framework 4.+ 版

/// <summary>/// 使用multipart/form-data方式上传文件及其他数据/// </summary>/// <param name="headers">请求头参数</param>/// <param name="nameValueCollection">键值对参数</param>/// <param name="fileCollection">文件参数:参数名,文件路径</param>/// <returns>接口返回结果</returns>public static string PostMultipartFormData(string url, Dictionary<string, string> headers, NameValueCollection nameValueCollection, NameValueCollection fileCollection){using (var client = new HttpClient()){foreach (var item in headers){client.DefaultRequestHeaders.Add(item.Key, item.Value);}using (var content = new MultipartFormDataContent()){// 键值对参数string[] allKeys = nameValueCollection.AllKeys;foreach (string key in allKeys){var dataContent = new ByteArrayContent(Encoding.UTF8.GetBytes(nameValueCollection[key]));dataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data"){Name = key};content.Add(dataContent);}//处理文件内容string[] fileKeys = fileCollection.AllKeys;foreach (string key in fileKeys){byte[] bmpBytes = File.ReadAllBytes(fileCollection[key]);var fileContent = new ByteArrayContent(bmpBytes);//填充文件字节fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data"){Name = key,FileName = Path.GetFileName(fileCollection[key])};content.Add(fileContent);}var result = client.PostAsync(url, content).Result;//post请求string data = result.Content.ReadAsStringAsync().Result;return data;//返回操作结果}}}

Web API 接收接口
ASP .NET Core Web API 接口接收 multipart/form-data 文件、数据

[HttpPost]//public string Post([FromForm] string directory, [FromForm] IList<IFormFile> files )public string Post([FromForm] string directory, [FromForm] IFormFile files){return "";}[HttpPut]public string Put([FromForm] IFormFile templateFile, [FromForm] string id, [FromForm] string objectVersionNumber){return "";}

ASP.NET 4.x 版

[HttpPost(Name = "PostWeatherForecast")]//public string Post([FromForm] string directory, [FromForm] IList<IFormFile> files )public string Post([FromForm] string directory, [FromForm] IFormFile files){// Check if the request contains multipart/form-data.if (!Request.ContentType.IsMimeMultipartContent()){throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);}string root = Request.HttpContext.Current.Server.MapPath("~/App_Data");var provider = new MultipartFormDataStreamProvider(root);try{// Read the form data.await Request.Content.ReadAsMultipartAsync(provider);// This illustrates how to get the file names.//foreach (MultipartFileData file in provider.FileData)//{//    Trace.WriteLine(file.Headers.ContentDisposition.FileName);//    Trace.WriteLine("Server file path: " + file.LocalFileName);//}//  return Request.CreateResponse(HttpStatusCode.OK);}catch (System.Exception e){//  return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);}return "";}

http://www.ppmy.cn/news/1556570.html

相关文章

自动驾驶AVM环视算法--python版本的540投影模式

c语言版本和算法原理的可以查看本人的其他文档。《自动驾驶AVM环视算法--540度全景的算法实现和exe测试demo》本文档进用于展示部分代码的视线&#xff0c;获取方式网盘自行获取&#xff08;非免费介意勿下载&#xff09;&#xff1a;链接: https://pan.baidu.com/s/19fxwrZ3Bb…

语义分割——DeeplabV3plus

DeeplabV3plus 是一种先进的用于语义分割任务的深度学习模型。DeepLabV3plus模型采用了编码器-解码器&#xff08;Encoder-Decoder&#xff09;结构&#xff0c;通过编码器提取图像特征&#xff0c;再通过解码器将这些特征映射回原始图像尺寸&#xff0c;实现像素级的分类。具体…

phpSpider如何应对反爬虫的页面反爬机制

phpSpider在应对反爬虫的页面反爬机制时&#xff0c;可以采取多种策略。以下是一些常见的反爬虫机制及phpSpider的应对策略&#xff1a; 一、User-Agent检测 反爬虫机制&#xff1a;通过识别请求头中的User-Agent字段&#xff0c;判别访问是否来自自动化程序。应对策略&#…

ElasticSearch的自动补全功能(拼音分词器、自定义分词器、DSL实现自动补全查询、RestAPI实现自动补全查询)

文章目录 1. 什么是自动补全2. 拼音分词器2.1 初识拼音分词器2.2 下载拼音分词器2.3 安装拼音分词器2.4 测试拼音分词器 3. 自定义分词器3.1 拼音分词器存在的问题3.2 分词器&#xff08;analyzer&#xff09;的组成3.3 如何自定义分词器3.4 拼音分词器的可选参数3.5 配置自定义…

开源的个人笔记系统TriliumNext

什么是 TriliumNext &#xff1f; TriliumNext Notes 是一个层次化的笔记应用程序&#xff0c;专注于建立大型个人知识库。旨在帮助用户管理和组织笔记、想法和知识。它提供了丰富的功能&#xff0c;包括强大的富文本编辑器框架、模块化架构、现代集成以及协作编辑等特性。 Tri…

PHP 8新特性深度解析与实战应用

引言 PHP作为一种广泛使用的开源脚本语言&#xff0c;以其在Web开发领域的卓越性能而闻名。随着PHP 8的发布&#xff0c;这门语言再次迎来了许多令人兴奋的新特性和改进。本文将深入探讨PHP 8的新特性&#xff0c;并提供实战应用示例&#xff0c;帮助开发者更好地理解和使用PH…

python IO编程:序列化

在Python的IO编程中&#xff0c;序列化&#xff08;Serialization&#xff09;是指将数据结构或对象转换为一种格式&#xff08;如JSON、XML、二进制等&#xff09;&#xff0c;以便可以将其保存到磁盘、通过网络传输或存储在内存中。反序列化&#xff08;Deserialization&…

pytest 小技巧:非测试方法如何使用 pytest fixture

不是test开头的普通方法可以使用fixture吗&#xff1f; 是的&#xff0c;普通方法&#xff08;非以 test_ 开头的方法&#xff09;也可以使用 pytest 的 fixture&#xff0c;但有一些特别的注意事项。 1、使用 fixture 的方式&#xff1a; pytest 的 fixture 主要是用来提供测…