Я храню большие мультимедийные файлы в хранилище BLOB-объектов Azure (аудио, изображения, видео), которые необходимо предварительно просмотреть в приложении веб-клиента.
В настоящее время клиент запрашивает мультимедийный файл, и мой сервер загружаетвесь большой двоичный объект в память, затем возвращает файл клиенту.
Действие контроллера
[HttpGet("[action]/{blobName}")]
public async Task<IActionResult> Audio(string blobName)
{
byte[] byteArray = await _blobService.GetAudioAsync(blobName);
return File(byteArray, AVHelper.GetContentType(blobName));
}
Способ загрузки службы
private async Task<byte[]> GetAudioAsync(CloudBlobContainer container, string blobName)
{
using (MemoryStream stream = new MemoryStream())
{
CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
await blob.DownloadToStreamAsync(stream);
return stream.ToArray();
}
}
Меня беспокоит, что это не такхороший дизайн, поскольку файл загружается дважды в последовательном режиме, что приведет к более медленной загрузке и увеличенному использованию памяти сервера.Размер файла может составлять несколько сотен МБ.
Есть ли какой-нибудь рекомендуемый метод для этого?Может быть, что-то, где сервер загружает из хранилища BLOB-объектов и передает файл клиенту псевдо одновременно?Таким образом, клиенту не нужно ждать, пока сервер полностью загрузит файл, чтобы начать загрузку, и сервер сможет удалить уже переданное содержимое файла из памяти.