.NET Core WebAPI 基礎 文件上傳

来源:https://www.cnblogs.com/ysmc/archive/2023/08/30/17666170.html
-Advertisement-
Play Games

昨天分享了一個在WebApi中如何接收參數的文章 傳送門,然後有新人小伙伴就問了,那文件上傳呢,這個怎麼弄,藉此我寫了一個小demo,分享給大家。 通常來說,上傳文件,我們是使用POST,還是老規矩先上代碼: txt文件 這是需要上傳的txt文件。 指定文件參數名 代碼 [HttpPost("Upl ...


  昨天分享了一個在WebApi中如何接收參數的文章 傳送門,然後有新人小伙伴就問了,那文件上傳呢,這個怎麼弄,藉此我寫了一個小demo,分享給大家。

  通常來說,上傳文件,我們是使用POST,還是老規矩先上代碼:

txt文件

這是需要上傳的txt文件。

指定文件參數名

代碼

[HttpPost("UploaFile")]
public async Task<Dictionary<string, string>> UploadFileAsync(IEnumerable<IFormFile> files)
{
    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<string, string>()
    {
        ["fileContent"] = fileContent.ToString()
    };

    return result;
}

調用示例

  這裡有一個需要註意的地方,就是上傳文件的參數名,需要跟介面的入參名一致,也就是 files,我們使用的類型為 IEnumerable<IFormFile>,主要是 IFormFile 這個,因為我們上傳的文件可能不止一個,所以這裡使用了集合,要是不喜歡 IEnumerable,換成 List 也是可以的;

不指定文件參數名

  而在實際開發中,我們可能會碰到前端不配合,或者參數名改來改去,我們後端又不想頻繁更改,那怎麼辦呢,此時我們可以使用以下的方法,不過我個人不太建議,還是好好溝通的好,不然別人看到你的介面文檔,例如swagger,都不知道你這個介面是上傳文件的。

代碼

[HttpPost("UploaFile2")]
public async Task<Dictionary<string, string>> 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<string, string>()
    {
        ["fileContent"] = fileContent.ToString()
    };

    return result;
}

示例

   可以看到,結果是一樣的。

混合

  而同樣是一個POST請求,自然是可以通過url,route,from這些傳參啦!

代碼

[HttpPost("{method}/{value}/UploaFile")]
public async Task<Dictionary<string, object>> UploadFileAsync(
    [FromRoute] Parameter route,
    [FromQuery] Parameter query,
    [FromForm] Parameter form,
    IEnumerable<IFormFile> files)
{
    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<string, object>()
    {
        ["route"] = route,
        ["query"] = query,
        ["form"] = form,
        ["fileContent"] = fileContent.ToString()
    };

    return result;
}

示例

 關於文件上傳,在微軟的官網中也有對應的文檔,感興趣的小伙伴可以去看看,傳送門,感謝各位的閱讀,有任何問題歡迎評論區留言!

本文來自博客園,作者:一事冇誠,轉載請註明原文鏈接:https://www.cnblogs.com/ysmc/p/17666170.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在CMS之前的垃圾回收器,要麼就是串列垃圾回收方式,要麼就是關註系統吞吐量,而 CMS 垃圾回收器的出現,則打破了這個尷尬的局面。 ...
  • ## 指令重排序 ### 1、問題描述 首先一定要明確:指令重排序和有序性是不一樣的。這一點非常重要。 我們經常都會這麼說: - volatile能保證記憶體可見性、禁止指令重排序但是不能保證原子性。 - synchronized能保證原子性、可見性和有序性。 > 註意:這裡的有序性並不是代表能禁止指 ...
  • 本文分享自華為雲社區《哪些場景下Spring的事務會失效?》,作者:冰 河 。 在日常工作中,如果對Spring的事務管理功能使用不當,則會造成Spring事務不生效的問題。而針對Spring事務不生效的問題,也是在跳槽面試中被問的比較頻繁的一個問題。 今天,我們就一起梳理下有哪些場景會導致Spri ...
  • ### 前言 AC自動機($Aho\ Corasick\ Atomaton$)有著一種 [$KMP$](https://www.cnblogs.com/pdpdzaa/p/17641166.html) 的思想,所以在學習之前建議先學一下 $KMP$。同時還需要瞭解一下 $Trie$ 樹(建議去看一下 ...
  • `go embed` 是 Go 1.16 中引入的特性,它允許將文件嵌入到 Go 代碼中,以便在運行時訪問這些文件。這對於將靜態資源(如 HTML、CSS、JavaScript 文件)直接嵌入到 Go 二進位文件中,以及簡化文件分發和部署非常有用。下麵是關於 `go embed` 的詳細介紹: ** ...
  • ## 教程簡介 R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。R語言的核心是解釋電腦語言,其允許分支和迴圈以及使用函數的模塊化編程。 R語言允許與以C,C ++,.Net,Python或FORTRAN語言編寫 ...
  • 作者:TinyThing 鏈接:https://www.jianshu.com/p/b52db905f020 ## 0x0 背景 > 項目中使用LocalDateTime系列作為dto中時間的類型,但是spring收到參數後總報錯,為了全局配置時間類型轉換,嘗試瞭如下3中方法。 > > **註:本文 ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本篇是《java與es8實戰》系列的第四 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...