将大文件上传到 API 并将其存储为 blob

Upload large file to API and store it ti blob

我有简单的网络 api 控制器和操作

[HttpPost]
public async Task<IActionResult> Add(IFormFile file)
{
    var firmware = await _firmwareManager.Add(
        new FirmwareAddDto
        {
            Name = file?.FileName,
            Version = version,
            Data = file?.OpenReadStream()
        });

    return StatusCode((int)HttpStatusCode.Created, firmware);
}

然后在管理器中我有将流存储到 azure blob 存储的代码

byte[] data = firmwareAddDto.Data.ToByteArray();
var blob = await _fileStorage.Add("filename", data);

我应该把东西扔在这里吗?我要上传一个大文件。能否正确处理请指教

对于大文件,我建议您将传入流复制到传出流中,以避免将所有文件保存在内存中的字节数组中。

假设您在 fileStorage 中有一个支持流的方法,您可以在调用 Add 方法后处理它。正如您在下面的示例中看到的那样:

 using(var incomingStream = file.OpenReadStream())
 {
     var firmware = await _firmwareManager.Add(
        new FirmwareAddDto
        {
            Name = file?.FileName,
            Version = version,
            Data = incomingStream 
        });
     (...)
  }

然后在管理器中,您可以使用流调用方法:

var blob = await _fileStorage.Add("filename", firmwareAddDto.Data);