天天看點

.NET Core Web API使用HttpClient送出檔案的二進制流(multipart/form-data内容類型)

   在需要通過服務端請求傳遞檔案二進制檔案流資料到相關的服務端儲存時,如對接第三方接口很多情況下都會提供一個上傳檔案的接口,但是當你直接通過前端Ajax的方式将檔案流上傳到對方提供的接口的時候往往都會存在跨域的情況,這時候我們就需要通過服務端送出檔案流來解決這個跨域的情況。本篇的主角就是使用HttpClient進行Http請求,送出二進制檔案流到檔案伺服器中。

HttpClient類執行個體充當發送 HTTP 請求的會話。 HttpClient執行個體是對該執行個體執行的所有請求應用的設定的集合。 此外,每個 HttpClient 執行個體都使用其自己的連接配接池,并從其他執行個體所執行的請求隔離其請求 HttpClient 。

使用注意點:HttpClient對象比較特殊,雖然繼承了IDisposable這個接口但是它可以被共享執行個體,并且使用完不能立即關閉連接配接、性能消耗嚴重。是以我們在使用的時候,需要主動調用<code>Dispose</code>方法來釋放它。可以使用using如下所示:

網上說.NET Core版本的HttpClient存在比較多的問題(不過我自己一直在使用HttpClient做一些http請求),大家也可以HttpClientFactory,ASP.NET Core中使用HttpClientFactory官方教程:

在 ASP.NET Core 中使用 IHttpClientFactory 發出 HTTP 請求

注意點:

FormData:對象用以将資料編譯成鍵值對,以便用<code>XMLHttpRequest</code>來發送資料。其主要用于發送表單資料,但亦可用于發送帶鍵資料(keyed data),而獨立于表單使用。 contentType:需設定為false,在Ajax中contentType 設定為false 是為了避免 JQuery 對其操作,進而失去分界符,而使伺服器不能正常解析檔案。 processData:需設定為false,預設為true,表示以對象的形式上傳的時候會預設把對象轉化為字元串的形式上傳。

注意:

.NET Core Web API使用HttpClient送出檔案的二進制流(multipart/form-data内容類型)
.NET Core Web API使用HttpClient送出檔案的二進制流(multipart/form-data内容類型)

關于.NET Core上傳檔案的後端服務接口可以參考我之前寫過的文章:

ASP.NET Core單檔案和多檔案上傳并儲存到服務端
 https://github.com/YSGStudyHards/DailyLearning

https://www.cnblogs.com/willick/p/net-core-httpclient.html

https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient?view=net-5.0

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.http.iformfile.openreadstream?view=aspnetcore-5.0#Microsoft_AspNetCore_Http_IFormFile_OpenReadStream

作者:追逐時光者 作者簡介:一個熱愛程式設計,善于分享,喜歡學習、探索、嘗試新事物,新技術的程式猿。 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如果該篇文章對您有幫助的話,可以點一下右下角的【♥推薦♥】,希望能夠持續的為大家帶來好的技術文章,文中可能存在描述不正确或錯誤的地方,歡迎指正、補充,不勝感激 !

繼續閱讀