将大文件上传到 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);
我有简单的网络 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);