经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
.NET Core WebAPI 基础 文件上传
来源:cnblogs  作者:一事冇诚  时间:2023/8/30 9:11:56  对本文有异议

  昨天分享了一个在WebApi中如何接收参数的文章 传送门,然后有新人小伙伴就问了,那文件上传呢,这个怎么弄,借此我写了一个小demo,分享给大家。

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

txt文件

这是需要上传的txt文件。

指定文件参数名

代码

  1. [HttpPost("UploaFile")]
  2. public async Task<Dictionary<string, string>> UploadFileAsync(IEnumerable<IFormFile> files)
  3. {
  4. var fileStream = files.FirstOrDefault()?.OpenReadStream();
  5. var fileContent = new StringBuilder();
  6. if (fileStream != null)
  7. {
  8. using var reader = new StreamReader(fileStream!);
  9. while (reader.Peek() >= 0)
  10. {
  11. fileContent.AppendLine(await reader.ReadLineAsync());
  12. }
  13. }
  14. var result = new Dictionary<string, string>()
  15. {
  16. ["fileContent"] = fileContent.ToString()
  17. };
  18. return result;
  19. }

调用示例

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

不指定文件参数名

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

代码

  1. [HttpPost("UploaFile2")]
  2. public async Task<Dictionary<string, string>> UploadFile2Async()
  3. {
  4. var fileStream = HttpContext.Request.Form.Files.FirstOrDefault()?.OpenReadStream();
  5. var fileContent = new StringBuilder();
  6. if (fileStream != null)
  7. {
  8. using var reader = new StreamReader(fileStream!);
  9. while (reader.Peek() >= 0)
  10. {
  11. fileContent.AppendLine(await reader.ReadLineAsync());
  12. }
  13. }
  14. var result = new Dictionary<string, string>()
  15. {
  16. ["fileContent"] = fileContent.ToString()
  17. };
  18. return result;
  19. }

示例

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

混合

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

代码

  1. [HttpPost("{method}/{value}/UploaFile")]
  2. public async Task<Dictionary<string, object>> UploadFileAsync(
  3. [FromRoute] Parameter route,
  4. [FromQuery] Parameter query,
  5. [FromForm] Parameter form,
  6. IEnumerable<IFormFile> files)
  7. {
  8. var fileStream = files.FirstOrDefault()?.OpenReadStream();
  9. var fileContent = new StringBuilder();
  10. if (fileStream != null)
  11. {
  12. using var reader = new StreamReader(fileStream!);
  13. while (reader.Peek() >= 0)
  14. {
  15. fileContent.AppendLine(await reader.ReadLineAsync());
  16. }
  17. }
  18. var result = new Dictionary<string, object>()
  19. {
  20. ["route"] = route,
  21. ["query"] = query,
  22. ["form"] = form,
  23. ["fileContent"] = fileContent.ToString()
  24. };
  25. return result;
  26. }

示例

 关于文件上传,在微软的官网中也有对应的文档,感兴趣的小伙伴可以去看看,传送门,感谢各位的阅读,有任何问题欢迎评论区留言!

原文链接:https://www.cnblogs.com/ysmc/p/17666170.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号