1..NET Core 环境搭建2..Net Core IOC DI(依赖注入)3..NET Core 读取配置技巧 – IOptions<TOptions> 接口4..Net Core 依赖注入(IOC) 一些简单的使用技巧5..Net Core 可为Null的类型6..Net Core 配置文件 appsettings.json7..NET 反向代理-YARP 部署Https(SSL)8..NET 反向代理-YARP 根据域名转发9..NET 7 来了!!!10..NET 反向代理-YARP11..Net Core 配置文件读取 – IOptions、IOptionsMonitor、IOptionsSnapshot12..NET Core 实现后台任务(定时任务)Longbow.Tasks 组件(三)13..NET Core 实现后台任务(定时任务)BackgroundService(二)14..NET Core 实现后台任务(定时任务)IHostedService(一)15..Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute16..NET 反向代理 YARP 代理 GRPC17..Net 7 C#11 原始字符串18..NET 反向代理 YARP 跨域请求 CORS19..NET 反向代理 YARP 自定义配置提供程序(Configuration Providers)20..NET 反向代理 YARP 通过编码方式配置域名转发21..NET 部署 多域名 Https(SSL)通过代码方式22..NET WebAPI 基础 FromRoute、FromQuery、FromBody 用法
23..NET Core WebAPI 基础 文件上传
昨天分享了一个在WebApi中如何接收参数的文章 传送门,然后有新人小伙伴就问了,那文件上传呢,这个怎么弄,借此我写了一个小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; }
示例
关于文件上传,在微软的官网中也有对应的文档,感兴趣的小伙伴可以去看看,传送门,感谢各位的阅读,有任何问题欢迎评论区留言!
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END