2023-08-31 04:40:30 來(lái)源 : 中年農(nóng)碼工
有新人小伙伴就問(wèn)了,那文件上傳呢,這個(gè)怎么弄,借此我寫(xiě)了一個(gè)小demo,分享給大家。
通常來(lái)說(shuō),上傳文件,我們是使用POST,還是老規(guī)矩先上代碼:
(相關(guān)資料圖)
這是需要上傳的txt文件。
[HttpPost(\"UploaFile\")]public async Task>UploadFileAsync(IEnumerablefiles){ var fileStream = files.FirstOrDefault()?.OpenReadStream(); var fileContent = new StringBuilder(); if (fileStream != null) { using var reader = new StreamReader(fileStream!); while (reader.Peek() >= 0) { fileContent.AppendLine(await reader.ReadLineAsync()); } } var result = new Dictionary() { [\"fileContent\"] = fileContent.ToString() }; return result;}
這里有一個(gè)需要注意的地方,就是上傳文件的參數(shù)名,需要跟接口的入?yún)⒚恢?,也就?files,我們使用的類型為 IEnumerable
而在實(shí)際開(kāi)發(fā)中,我們可能會(huì)碰到前端不配合,或者參數(shù)名改來(lái)改去,我們后端又不想頻繁更改,那怎么辦呢,此時(shí)我們可以使用以下的方法,不過(guò)我個(gè)人不太建議,還是好好溝通的好,不然別人看到你的接口文檔,例如swagger,都不知道你這個(gè)接口是上傳文件的。
[HttpPost(\"UploaFile2\")]public async Task>UploadFile2Async(){ var fileStream = HttpContext.Request.Form.Files.FirstOrDefault()?.OpenReadStream(); var fileContent = new StringBuilder(); if (fileStream != null) { using var reader = new StreamReader(fileStream!); while (reader.Peek() >= 0) { fileContent.AppendLine(await reader.ReadLineAsync()); } } var result = new Dictionary() { [\"fileContent\"] = fileContent.ToString() }; return result;}
可以看到,結(jié)果是一樣的。
而同樣是一個(gè)POST請(qǐng)求,自然是可以通過(guò)url,route,from這些傳參啦!
[HttpPost(\"{method}/{value}/UploaFile\")]public async Task>UploadFileAsync( [FromRoute] Parameter route, [FromQuery] Parameter query, [FromForm] Parameter form, IEnumerablefiles){ var fileStream = files.FirstOrDefault()?.OpenReadStream(); var fileContent = new StringBuilder(); if (fileStream != null) { using var reader = new StreamReader(fileStream!); while (reader.Peek() >= 0) { fileContent.AppendLine(await reader.ReadLineAsync()); } } var result = new Dictionary() { [\"route\"] = route, [\"query\"] = query, [\"form\"] = form, [\"fileContent\"] = fileContent.ToString() }; return result;}
關(guān)于文件上傳,在微軟的官網(wǎng)中也有對(duì)應(yīng)的文檔,感興趣的小伙伴可以去看看,傳送門(mén),感謝各位的閱讀,有任何問(wèn)題歡迎評(píng)論區(qū)留言!