asp.net core webapi文件上传功能的实现

 更新时间:2020年12月31日 08:43:08   作者:波多尔斯基  
这篇文章主要介绍了asp.net core webapi文件上传功能的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

最近开发一个新项目,使用了asp.net core 2.0,采用webapi开发后台,postgresql为数据库。最先来的问题就是上传文件的问题。

POST文件的一些坑

使用默认模板创建webapi的controller后,post请求,默认有

 // POST api/values
  [HttpPost]
  public void Post([FromBody]string value)
  {
  }

请求使用了[FromBody]标记,用来指示用请求体里获得数据。

对于文件上传请求,直接在这个Post函数里使用Request.Form.Files是不行的,无法成功路由。
典型上传,需要设置前端发送的请求Content-Typemultipart/form-data,然后在控制器类加上特性修饰:

 [Produces("application/json")]
 [Consumes("application/json", "multipart/form-data")]//此处为新增
 [Route("api/[controller]")]
 public class FileController : Controller

指示该controller能够接受multipart/form-data形式的数据。对应的,修改post的代码如下:

 // POST: api/File
  [HttpPost]
  public Task<ActionResult> Post(IFormCollection files)

这里需要注意,使用的是IFormCollection。这是IForm的类型集合,实际上就是Request.Form

注意,很多地方写了可以使用IFormFile,直接写成

// POST: api/File
  [HttpPost]
  public Task<ActionResult> Post(IFormFile file)

实际测试没有办法获取到对象,file常态为null,或者是我方法不对。

然后就可以在post方法里面使用files.Files来枚举文件了,每个文件都是一个IFormFile对象,可以灵活使用FileName, Name,Length等常用属性。当然,我们也可以不带参数:

// POST: api/File
  [HttpPost]
  public Task<ActionResult> Post()

直接使用Request.Form.Files获得文件数据。

P.S. 对于IFormFile,与System.IO.File对象不同,IFormFile缺少很多方法,只提供OpenReadStream()方法,该方法返回一个stream对象。很多读文件的API都可以接受stream作为FilePath的替代。

同时上传其他数据

一般的文件上传请求,不单上传文件数据,通常还需要上传其他文件信息数据(比如文件类型,上传者等等)。修改一下post方法,改成这样:

 [HttpPost]
  public Task<ActionResult> Post([FromBody]string type,IFormCollection files)

将type都打包进请求,再次发送。发现......type是null。

MSDN说了,The reason for this rule is that the request body might be stored in a non-buffered stream that can only be read once.

所以,[FromBody]只能加一个,但是我这确实也只加了一个,有问题?很明显,那个IFormCollection也是默认通过[FromBody]解析的,所以正确的方法是不加[FromBody]了。

 [HttpPost]
  public Task<ActionResult> Post(string type,IFormCollection files)

后记

回想起当年做WebService的时候,上传文件写的
多平台上传
,感触颇多,以前是转码到base64,通过string发送,现在是直接类型识别...

到此这篇关于asp.net core webapi文件上传的文章就介绍到这了,更多相关asp.net core webapi文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用.net代码实现发送邮件

    利用.net代码实现发送邮件

    这篇文章主要为大家详细介绍了利用.net代码实现发送邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • web.config中配置数据库连接的方式

    web.config中配置数据库连接的方式

    Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。本文主要介绍web.config中配置数据库连接的两种方式,一起来看。
    2015-10-10
  • C#反射技术的简单操作(读取和设置类的属性)

    C#反射技术的简单操作(读取和设置类的属性)

    反射的作用想必大家都知道了吧,少量属性的自动化操作手动添加几下当然是没有问题的,但是属性数量较多的时候敲起这些繁锁的代码可以困了,再说对扩展和维护性造成很多的不遍,以下代码中如不能直接使用请添加using System.Text;的引用。
    2011-01-01
  • asp.net下cookies操作完美代码

    asp.net下cookies操作完美代码

    asp.net下cookies操作完美代码,需要的朋友可以参考下。
    2010-03-03
  • 在ASP.NET Core微服务架构下使用RabbitMQ实现CQRS模式的方法

    在ASP.NET Core微服务架构下使用RabbitMQ实现CQRS模式的方法

    ASP.NET Core微服务架构中,使用RabbitMQ作为消息队列服务,通过实现CQRS模式,将写操作和读操作分离,以提高系统的性能和可伸缩性,本文小编将为大家介绍如何在ASP.NET Core微服务架构下使用RabbitMQ来实现CQRS模式,感兴趣的朋友一起看看吧
    2024-01-01
  • .Net与JS时间日期格式的转换问题对比分析

    .Net与JS时间日期格式的转换问题对比分析

    这篇文章主要介绍了.Net与JS时间日期格式的转换问题,结合实例形式对比分析了JS与.Net针对时间日期格式的转换处理相关技巧,需要的朋友可以参考下
    2016-08-08
  • ASP.NET中操作数据库的基本步骤分享

    ASP.NET中操作数据库的基本步骤分享

    ASP.NET中操作数据库的基本步骤分享,学习asp.net的朋友可以参考下。
    2011-10-10
  • ASP.NET图片处理三类经典问题

    ASP.NET图片处理三类经典问题

    这篇文章主要介绍了ASP.NET图片处理三类经典问题,验证码的实现、给图片加文字,最后一个就是生成缩略图,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • 一步步打造简单的MVC电商网站BooksStore(1)

    一步步打造简单的MVC电商网站BooksStore(1)

    这篇文章主要和大家一起一步步打造一个简单的MVC电商网站,MVC电商网站BooksStore第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • ASP.NET Core记录日志

    ASP.NET Core记录日志

    这篇文章介绍了ASP.NET Core记录日志的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论