欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何在asp.netcore中使用webapi實(shí)現(xiàn)一個(gè)文件上傳功能-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何在asp.net core中使用webapi實(shí)現(xiàn)一個(gè)文件上傳功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

十余年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站建設(shè),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站建設(shè),高端網(wǎng)頁(yè)制作,對(duì)石牌坊等多個(gè)方面,擁有豐富的網(wǎng)站營(yíng)銷經(jīng)驗(yàn)。

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


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

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

對(duì)于文件上傳請(qǐng)求,直接在這個(gè)Post函數(shù)里使用Request.Form.Files是不行的,無法成功路由。
典型上傳,需要設(shè)置前端發(fā)送的請(qǐng)求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ù)。對(duì)應(yīng)的,修改post的代碼如下:

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

這里需要注意,使用的是IFormCollection。這是IForm的類型集合,實(shí)際上就是Request.Form

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

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

實(shí)際測(cè)試沒有辦法獲取到對(duì)象,file常態(tài)為null,或者是我方法不對(duì)。

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

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

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

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

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

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

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

將type都打包進(jìn)請(qǐng)求,再次發(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]只能加一個(gè),但是我這確實(shí)也只加了一個(gè),有問題?很明顯,那個(gè)IFormCollection也是默認(rèn)通過[FromBody]解析的,所以正確的方法是不加[FromBody]了。

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

關(guān)于如何在asp.net core中使用webapi實(shí)現(xiàn)一個(gè)文件上傳功能就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享標(biāo)題:如何在asp.netcore中使用webapi實(shí)現(xiàn)一個(gè)文件上傳功能-創(chuàng)新互聯(lián)
標(biāo)題來源:http://chinadenli.net/article14/dgjsde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作企業(yè)網(wǎng)站制作、微信公眾號(hào)搜索引擎優(yōu)化、網(wǎng)站營(yíng)銷、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司