ASP.NET Core アップロードされたCSVファイルを文字列のリストとして読み込む
ASP.NET Core
のWebAPI
の環境で、アップロードされたCSV
ファイルを1行ずつ読み込み、文字列string
型のリストに格納します。
アップロードされたファイルをバイナリデータ(byte
配列)として読み込む方法はASP.NET Core WebAPIでファイルアップロードを行うで紹介していますが、ここでは文字列として1行ずつ読み込む方法を紹介します。
ASP.NET Core WebAPIでファイルアップロードを行うで作成した拡張機能のGetBytesAsync
と同じように。IFormFile
の拡張メソッドを作成します。
StreamReader
の第2引数の文字コードはアップロードされるCSV
ファイルの文字コードに合わせて適宜変更してください。
public static class Extensions
{
public static async Task<List<string>> ReadCsvAsync(this IFormFile file)
{
var result = new List<string>();
using (var reader = new StreamReader(file.OpenReadStream(), Encoding.UTF8))
{
while (reader.Peek() >= 0)
{
result.Add(await reader.ReadLineAsync() ?? "");
}
}
return result;
}
}
コントローラーからは以下のように使用します。(DocumentCreateRequest
についてはASP.NET Core WebAPIでファイルアップロードを行うで作成したものと同じです)
DocumentController
[HttpPost]
public async Task<IActionResult> Create([FromForm] DocumentCreateRequest request)
{
// ファイルをCSV文字列として読み込む
List<string> csv = await request.File.ReadCsvAsync();
// CSVデータを使った処理
}