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データを使った処理
}