欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net core webapi文件上傳功能的實現(xiàn)

 更新時間:2020年12月31日 08:43:08   作者:波多爾斯基  
這篇文章主要介紹了asp.net core webapi文件上傳功能的實現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近開發(fā)一個新項目,使用了asp.net core 2.0,采用webapi開發(fā)后臺,postgresql為數(shù)據(jù)庫。最先來的問題就是上傳文件的問題。

POST文件的一些坑

使用默認(rèn)模板創(chuàng)建webapi的controller后,post請求,默認(rèn)有

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

請求使用了[FromBody]標(biāo)記,用來指示用請求體里獲得數(shù)據(jù)。

對于文件上傳請求,直接在這個Post函數(shù)里使用Request.Form.Files是不行的,無法成功路由。
典型上傳,需要設(shè)置前端發(fā)送的請求Content-Typemultipart/form-data,然后在控制器類加上特性修飾:

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

指示該controller能夠接受multipart/form-data形式的數(shù)據(jù)。對應(yīng)的,修改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常態(tài)為null,或者是我方法不對。

然后就可以在post方法里面使用files.Files來枚舉文件了,每個文件都是一個IFormFile對象,可以靈活使用FileName, Name,Length等常用屬性。當(dāng)然,我們也可以不帶參數(shù):

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

直接使用Request.Form.Files獲得文件數(shù)據(jù)。

P.S. 對于IFormFile,與System.IO.File對象不同,IFormFile缺少很多方法,只提供OpenReadStream()方法,該方法返回一個stream對象。很多讀文件的API都可以接受stream作為FilePath的替代。

同時上傳其他數(shù)據(jù)

一般的文件上傳請求,不單上傳文件數(shù)據(jù),通常還需要上傳其他文件信息數(shù)據(jù)(比如文件類型,上傳者等等)。修改一下post方法,改成這樣:

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

將type都打包進請求,再次發(fā)送。發(fā)現(xiàn)......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也是默認(rèn)通過[FromBody]解析的,所以正確的方法是不加[FromBody]了。

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

后記

回想起當(dāng)年做WebService的時候,上傳文件寫的
多平臺上傳
,感觸頗多,以前是轉(zhuǎn)碼到base64,通過string發(fā)送,現(xiàn)在是直接類型識別...

到此這篇關(guān)于asp.net core webapi文件上傳的文章就介紹到這了,更多相關(guān)asp.net core webapi文件上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解.NET6下的Modbus通訊和數(shù)據(jù)庫記錄

    詳解.NET6下的Modbus通訊和數(shù)據(jù)庫記錄

    本文主要介紹了.NET6下的Modbus通訊和數(shù)據(jù)庫記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • .net 日志系統(tǒng)解析

    .net 日志系統(tǒng)解析

    本篇分享的目的是能幫助需要的人快速搭建自己的LogSystem,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • .NET Core中本地化機制的深入講解

    .NET Core中本地化機制的深入講解

    這篇文章主要給大家介紹了關(guān)于.NET Core中本地化機制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • asp.net 生成靜態(tài)頁筆記

    asp.net 生成靜態(tài)頁筆記

    asp.net 生成靜態(tài)頁筆記,需要在asp.net中生成靜態(tài)頁面的朋友可以參考下。
    2011-06-06
  • ASP.NET網(wǎng)站導(dǎo)航及導(dǎo)航控件如何使用

    ASP.NET網(wǎng)站導(dǎo)航及導(dǎo)航控件如何使用

    這篇文章主要介紹了ASP.NET網(wǎng)站導(dǎo)航及導(dǎo)航控件如何使用,需要的朋友可以參考下
    2015-09-09
  • GridView單元格合并

    GridView單元格合并

    合并單元格 合并某一行的所有列
    2008-12-12
  • ASP.NET?Core項目使用xUnit進行單元測試

    ASP.NET?Core項目使用xUnit進行單元測試

    這篇文章介紹了ASP.NET?Core項目使用xUnit進行單元測試的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Entity?Framework導(dǎo)航屬性介紹

    Entity?Framework導(dǎo)航屬性介紹

    這篇文章介紹了Entity?Framework的導(dǎo)航屬性,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • ASP.NET中Application全局對象用法實例淺析

    ASP.NET中Application全局對象用法實例淺析

    這篇文章主要介紹了ASP.NET中Application全局對象用法,較為詳細(xì)的分析了ASP.NET中Application全局對象的功能、定義及使用中的相關(guān)注意事項,需要的朋友可以參考下
    2015-06-06
  • SQL為查詢的結(jié)果加上序號(ROW_NUMBER) 合并多個查詢結(jié)果

    SQL為查詢的結(jié)果加上序號(ROW_NUMBER) 合并多個查詢結(jié)果

    SQL為查詢的結(jié)果加上序號(ROW_NUMBER) 合并多個查詢結(jié)果
    2010-03-03

最新評論