昨天分享了一个在WebApi中如何接收参数的文章 .NET API 中的 FromRoute、FromQuery、FromBody 用法 - 一事冇诚 - 博客园 (cnblogs.com),然后有新人小伙伴就问了,那文件上传呢,这个怎么弄,借此我写了一个小demo,分享给大家。

  通常来说,上传文件,我们是使用POST,还是老规矩先上代码:

txt文件

这是需要上传的txt文件。

指定文件参数名

代码

[HttpPost("UploaFile")]
public async Task<Dictionary<string, string>> UploadFileAsync(IEnumerable<IFormFile> files)
{
var fileStream = files.FirstOrDefault()?.OpenReadStream();
var fileContent = new StringBuilder();
if (fileStream != null)
{
using var reader = new StreamReader(fileStream!);
while (reader.Peek() >= 0)
{
fileContent.AppendLine(await reader.ReadLineAsync());
}
} var result = new Dictionary<string, string>()
{
["fileContent"] = fileContent.ToString()
}; return result;
}

调用示例

  这里有一个需要注意的地方,就是上传文件的参数名,需要跟接口的入参名一致,也就是 files,我们使用的类型为 IEnumerable<IFormFile>,主要是 IFormFile 这个,因为我们上传的文件可能不止一个,所以这里使用了集合,要是不喜欢 IEnumerable,换成 List 也是可以的;

不指定文件参数名

  而在实际开发中,我们可能会碰到前端不配合,或者参数名改来改去,我们后端又不想频繁更改,那怎么办呢,此时我们可以使用以下的方法,不过我个人不太建议,还是好好沟通的好,不然别人看到你的接口文档,例如swagger,都不知道你这个接口是上传文件的。

代码

[HttpPost("UploaFile2")]
public async Task<Dictionary<string, string>> UploadFile2Async()
{
var fileStream = HttpContext.Request.Form.Files.FirstOrDefault()?.OpenReadStream();
var fileContent = new StringBuilder();
if (fileStream != null)
{
using var reader = new StreamReader(fileStream!);
while (reader.Peek() >= 0)
{
fileContent.AppendLine(await reader.ReadLineAsync());
}
} var result = new Dictionary<string, string>()
{
["fileContent"] = fileContent.ToString()
}; return result;
}

示例

  可以看到,结果是一样的。

混合

  而同样是一个POST请求,自然是可以通过url,route,from这些传参啦!

代码

[HttpPost("{method}/{value}/UploaFile")]
public async Task<Dictionary<string, object>> UploadFileAsync(
[FromRoute] Parameter route,
[FromQuery] Parameter query,
[FromForm] Parameter form,
IEnumerable<IFormFile> files)
{
var fileStream = files.FirstOrDefault()?.OpenReadStream();
var fileContent = new StringBuilder();
if (fileStream != null)
{
using var reader = new StreamReader(fileStream!);
while (reader.Peek() >= 0)
{
fileContent.AppendLine(await reader.ReadLineAsync());
}
} var result = new Dictionary<string, object>()
{
["route"] = route,
["query"] = query,
["form"] = form,
["fileContent"] = fileContent.ToString()
}; return result;
}

示例

关于文件上传,在微软的官网中也有对应的文档,感兴趣的小伙伴可以去看看,传送门

.NET Core WebAPI 基础 文件上传的更多相关文章

  1. ASP.NET Core 中的文件上传

    ASP.NET Core上传文件 ASP.NET Core使用IFormFile来读取上传的文件内容,然后将数据写入到磁盘或其它存储空间. 添加FileUpload模型,用来接收上传的文件内容. pu ...

  2. .Net Core实现将文件上传到七牛云存储

    功能:将图片上传到七牛云存储 准备工作 注册七牛账号,提交实名认证(基本上1天内内审核通过) 登录七牛后台->对象存储->新建空间 (基本概念:https://developer.qini ...

  3. webAPI+angularJS文件上传和下载

    开发框架 前端 angularJS1.6 下载和保存文件FileSaver:https://github.com/eligrey/FileSaver.js/ 后端 .net WebAPI 1 导入Ex ...

  4. asp.net webapi 多文件上传

    使用enctype="multipart/form-data"来进行操作 /// <summary> /// 上传图片 /// </summary> /// ...

  5. 循序渐进学.Net Core Web Api开发系列【5】:文件上传

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍通 ...

  6. 解决ASP.NET Core Mvc文件上传限制问题

    一.简介 在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢? 二.设置上传 ...

  7. 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

    第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...

  8. fastdfs-client-java 文件上传

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相 ...

  9. asp.net core webapi文件上传

    最近开发一个新项目,使用了asp.net core 2.0,采用webapi开发后台,postgresql为数据库.最先来的问题就是上传文件的问题. POST文件的一些坑 使用默认模板创建webapi ...

  10. .net core webapi 文件上传在 Swagger 文档中的有好提示处理

    前提: 需要nuget   Swashbuckle.AspNetCore 我暂时用的是  4.01 最新版本: 描述:解决 .net core webapi 上传文件使用的是 IFormFile,在S ...

随机推荐

  1. windows server 2012 2019启动 开机自动启动 项设置

    1.第一种方法:打开运行功能,运行shell:startup,打开管理员用户启动项目录.将想要设置成开机自启的程序快捷方式添加到其中即可,或者删除其中快捷方式即可取消开机自启.2.第二种方法:打开系统 ...

  2. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

    Midjourney|文心一格prompt教程[基础篇]:注册使用教程.风格设置.参数介绍.隐私模式等 开头讲一下为什么选择Midjourney和文心一格,首先Midjourney功能效果好不多阐述: ...

  3. [SWPUCTF 2021 新生赛]PseudoProtocols

    [SWPUCTF 2021 新生赛]PseudoProtocols 一.题目 二.WP 1.打开题目,发现提示我们是否能找到hint.php,并且发现URL有参数wllm.所以我们尝试利用PHP伪协议 ...

  4. Blazor HyBrid在香橙派(Ubuntu Arm)运行的效果

    Blazor HyBrid在香橙派(Ubuntu Arm)运行的效果 准备香橙派一块!当前教程使用的是香橙派5 4G开发板 准备.NET环境 安装.NET Core依赖 sudo apt instal ...

  5. weex 开发APP 多行文本溢出处理

    weex中文字溢出不能使用常规的overflow:hidden 如: .text { overflow: hidden; text-overflow: ellipsis; white-space: n ...

  6. HyperPlatform

    之前也写过一个vt的框架,但是比较简单,写的比较乱迁移什么的比较麻烦,于是阅读下HyperPlatform的源码学习下. 本文只对主体框架分析. vt的流程大概如下 1:检测是否支持VT. 2:vmx ...

  7. UART-UART非常见波特率调试应用笔记

    UART非常见波特率调试 应用笔记 串口通信中的波特率选择,对于确保可靠的数据传输至关重要.波特率是衡量单位时间内传输的比特数,常见的波特率包括300.1200.2400.9600.115200等.不 ...

  8. bulkWrite探秘

    MongoDB有很多有趣的内置方法,其中为了批量处理一些写入操作,并且可以按照一定顺序执行,自从3.2版本之后提供了该批量方法:bulkWrite. 它的语法很简单: db.collection.bu ...

  9. 【VS Code 与 Qt6】运用事件过滤器批量操作子级组件

    如果某个派生自 QObject 的类重写 eventFilter 方法,那它就成了事件过滤器(Event Filter).该方法的声明如下: virtual bool eventFilter(QObj ...

  10. smarty 拼接字符串

    smarty 拼接字符串 newstr = [oldstr]|cat:[appendstr] 1 {$name = "Tom"} 2 {$phone = "1381234 ...