0

我有一个要求,我需要从客户端浏览器应用程序(使用 Angular4 构建)导入 csv 并将其发送到 Web api(使用 ASP.net Core 2 构建)。

我发送 csv 数据的选项是:

  1. 在请求正文中发送 csv 文本 - 例如,我们将 csv 文本输入到 textarea 输入

  2. 在请求中发送 csv 文件 - 例如使用 input type="file"

对于选项 1,我使用此解决方案将请求正文中的文本转换为类型化对象。适用于小型 csv 数据:

https://damienbod.com/2016/06/17/import-export-csv-in-asp-net-core/

对于选项 2,我之前做过类似的事情(MVC 中的示例):

查看(cshtml):

<form method="post" asp-action="Upload" asp-controller="Home" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="upload"/>
</form>

Web API 控制器(cs):

[HttpPost]
public IActionResult Upload(IFormFile file)
{
    if (file == null || file.Length == 0)
        throw new Exception("file should not be null");

   using (var fileStream = new FileStream("path_address", FileMode.Create))
   {
       await file.CopyTo(fileStream);
   }
}

同样,这适用于较小的 csv。我现在需要的是发送非常大的 csv 文件(可能只有几 GB)。我想要一个 ASP.net Core 2 的解决方案(如前所述从 Angular 发送),我可以将文件分成块并逐个发送到服务器。

理想情况下,当每个块都发送到服务器时,我想在代码中查看块的内容并验证其有效 - 因此将块转换为文本并验证诸如 a) 它具有预期的列数, b) 每行(将映射到服务器上的数据类型)具有每个字段的预期类型,例如,如果映射到的对象具有 int,则传递的不是字符串。

以前有人在 ASP.net Core 2 中使用过分块吗?

感谢您提前提供任何指示!

4

0 回答 0