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文件上传内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!

您大概感乐趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxyx.html