HttpClientでファイルをアップロードする.ネット6
問題
私は最近、サードパーティの“ドキュメントマネージャ”システムを使用してファイルを送信する方法を把握する必要がありました
HttpClient
イン.NET 6.0
. この「ドキュメントマネージャ」システムは既にファイルをアップロードするためのAPIを持っていました.我々が飛び込む前に、我々の要件/使用ケースについて注意する2つの面白いものがあります
RestSharp
, そして、我々は自然にすべてをしていますHttpClient
. それは私に少なくとも出発点を与えましたRestSharp
それをすることができました-それは可能でなければなりませんか?で掘り出した後
RestSharp
ソースと非常に類似した何かをしていたカップルの他のブログを見つけるhttps://makolyte.com/csharp-how-to-send-a-file-with-httpclient ), 私は解決策をまとめることができました.幸運にも、私たちはすでにIFormFile
私たちのコントローラのアクションには、サードパーティのドキュメントマネージャにファイルを“転送”にはかなり簡単に終わった.解決策
まず、ファイルをアップロードする
HttpClient
, リクエストに必要なコンテンツを作成する必要があります.この場合、私たちはMultipartFormDataContent
( System.Net.Http
), 加えるStreamContent
, フォームの内容を追加します.public async Task<IActionResult> Upload(IFormFile file)
{
var content = new MultipartFormDataContent();
var fileContent = new StreamContent(file.OpenReadStream());
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType);
content.Add(fileContent, "file", file.FileName);
}
以来、私たちはIFormFile
すでに、我々はHTTPリクエストのために必要な必要なコンテンツを作成するためにすべてのプロパティをオフにすることができます.これはうまく動作していましたが、私は、メタデータを記述するJSONフォーマット(JSON形式で)と一緒に行くために別のファイルを必要とすることを覚えています.幸いにも、我々はすでにこの特定のアップロード・ページからメタデータを演繹することができます.
適切なJSONをメモリに持つ点から始めましょう.
{
"key": "newFile",
"metadata": [
{
"name": "uploaded-by",
"value": "user123"
},
{
"name": "document-type",
"value": "work-order"
}
]
}
さて、そのJSONを念頭に置いて、文字列変数に代入して、このセカンダリペイロードを作成しましょう(コードの最初のブロックに追加).public async Task<IActionResult> Upload(IFormFile file)
{
var content = new MultipartFormDataContent();
var fileContent = new StreamContent(file.OpenReadStream());
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType);
content.Add(fileContent, "file", file.FileName);
var jsonPayload = "that payload from the above sample";
var jsonBytes = Encoding.UTF8.GetBytes(jsonPayload);
var jsonContent = new StreamContent(new MemoryStream(jsonBytes));
jsonContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
content.Add(jsonContent, "metadata", "metadata.json");
}
文字列の使用に注意してください."file"
and "metadata"
サードパーティAPIは、要求を行うときにファイルを呼び出す必要があるプロパティ名です.それらは理論的には何かであるかもしれません、しかし、どんな適切なAPIドキュメンテーションもあなたに話すべきです.それぞれの“ファイル”は“ファイル名”を必要とするfile.FileName
ハードコードのプロパティ"metadata.json"
二次ファイルについては、実際の名前を持っていないので、私たちが呼んでいるAPIに多少関係がありません.この時点で、あなたのことができます
POST
APIへのリクエストcontent
!public async Task<IActionResult> Upload(IFormFile file, CancellationToken cancellationToken)
{
var content = new MultipartFormDataContent();
var fileContent = new StreamContent(file.OpenReadStream());
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType);
content.Add(fileContent, "file", file.FileName);
var jsonPayload = "that payload from the above sample";
var jsonBytes = Encoding.UTF8.GetBytes(jsonPayload);
var jsonContent = new StreamContent(new MemoryStream(jsonBytes));
jsonContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
content.Add(jsonContent, "metadata", "metadata.json");
var response = await _httpClient.PostAsync("The API URI", content, cancellationToken);
return Ok();
}
もちろん、あなたは“何か”をしたいと思うでしょうresponse
あなたの要求が成功したことを確認するために、おそらくユーザーにも知っている😊.概要
そして、友人、どのようにサードパーティ製のAPIに2つのファイルをアップロードする方法です
HttpClient
, それらのファイルのうちの1つがあなたのウェブアプリケーションのユーザーによってアップロードされているとき、そして、もう一方は必要に応じてメモリでつくられることができます(少なくとも).上のコードのサンプルは「かなり」生産準備完了ですbe sure to utilize
HttpClient
properly そして心をusing
それらの使い捨て物に関する声明!私は、これが誰かを助けることを望みます.ない場合は、私に知らせてください、私はそれに応じてポストを調整します!
Reference
この問題について(HttpClientでファイルをアップロードする.ネット6), 我々は、より多くの情報をここで見つけました https://dev.to/calvinallen/uploading-files-with-httpclient-in-net-6-n83テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol