gpt4 book ai didi

c# - 如何高效地将文件从 Azure Blob Storage 发送到客户端?

转载 作者:行者123 更新时间:2023-12-05 05:10:10 25 4
gpt4 key购买 nike

我将大型媒体文件(音频、图像、视频)存储在 Azure Blob 存储中,需要在我的 Web 客户端应用程序中进行预览。

目前客户端请求媒体文件,我的服务器将整个 blob 下载到内存,然后将文件返回给客户端。

Controller Action

[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();
}
}

我担心这不是一个好的设计,因为文件被连续下载两次,这会导致下载速度变慢并增加服务器内存使用量。文件大小可能有数百 MB。

是否有一些推荐的方法可以做到这一点?也许服务器正在从 blob 存储下载文件并将文件同时流式传输到客户端?因此客户端不必等待服务器完全下载文件就可以开始下载,并且服务器可以从内存中删除已经传输的文件内容。

最佳答案

为了让其他人看到答案,我总结了评论中分享的答案:

建议直接重定向到 Blob Url,这样文件下载可以直接开始到客户端机器,Web 应用程序不需要将它下载到服务器上的流或文件。步骤:

1.当客户端点击下载时,AJAX 请求到达服务器。

2.服务器代码进行必要的验证并返回Azure Storage的文件URL。

3.AJAX代码获取服务器返回的URL并打开一个新的浏览器窗口并将其重定向到该URL。

关于c# - 如何高效地将文件从 Azure Blob Storage 发送到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com