华域联盟 .Net asp.net core webapi文件上传功能的实现

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

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-Type为multipart/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文件上传内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:ASP.NET 上传文件导入Excel的示例ASP.NET Core单文件和多文件上传并保存到服务端的方法asp.net利用ashx文件实现文件的上传功能asp.net大文件上传解决方案实例代码asp.net上传Excel文件并读取数据的实现方法ASP.NET MVC实现批量文件上传ASP.NET Core文件上传与下载实例(多种上传方式)解决asp.net上传文件超过了最大请求长度的问题ASP.NET MVC HttpPostedFileBase文件上传的实例代码ASP.NET 上传文件到共享文件夹的示例

asp.net
core
webapi
上传

相关文章
asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。未将对象引用设置到对象的实例的一个另类解决方法 2008-06-06
asp.net下cookies的丢失和中文乱码asp.net下cookies的丢失和中文乱码... 2007-04-04
C#处理Json的另外一种方式成功实践通过C#调用js,用Js解析Json,并将返回值转换为C#数组,这种思路相信你没有用过吧,试试也无妨啊,感兴趣的你可千万不要走开啊 2013-01-01
asp.net下通过泛解析和伪静态实现二级域名的实现方法当我们想做一个站群或想为每一个会员的主页设置为一个二级域名时,总是想拼命的去找些组件来实现。 2010-10-10
.net 弹出消息框后导致页面样式变乱解决方法点击按钮,执行提交操作,弹出消息框后,页面的样式变乱,已经确定了不是css样式的问题,接下来与大家共同探讨下究竟是什么问题导致页面变乱 2013-04-04
ASP.NET中实现导出ppt文件数据的实例分享这篇文章主要介绍了ASP.NET中实现导出ppt文件数据的实例分享,实例代码用C#语言编写,利用.NET的库实现起来还是比较简洁的,需要的朋友可以参考下 2016-02-02
asp.net 支付宝及时到帐接口使用详解这两天写支付宝接口, 这个话题不新了, 因为很多人都 做过了, 在这里我说说我的看法吧, 先说一下实现
2010-03-03
ASP.NET中使用Ajax的方法之前在Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的ScriptManager 2013-10-10
ASP.NET MVC5网站开发添加文章(八)小编整理的ASP.NET MVC5网站开发是一系列的文章体系,大家要一篇篇的仔细阅读,今天这篇文章主要介绍了ASP.NET MVC5网站开发添加文章,需要的朋友可以参考下 2015-09-09
Visual Studio 2019 使用 Live Share的教程图解Visual Studio 2019 在今天发布(北京时间)了,这次带来了一个比较有趣的 Live Share 功能,使用它可以进行更好的协作开发。这篇文章主要介绍了Visual Studio 2019 使用 Live Share的教程,需要的朋友可以参考下 2019-04-04

最新评论

本文由 华域联盟 原创撰写:华域联盟 » asp.net core webapi文件上传功能的实现

转载请保留出处和原文链接:https://www.cnhackhy.com/5005.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部