gpt4 book ai didi

C# API - 提供从 Azure Blob 存储下载文件

转载 作者:行者123 更新时间:2023-12-02 07:19:27 25 4
gpt4 key购买 nike

我目前正在解决将 Azure Blob 存储C# API结合使用时遇到的问题。我在这里的问题中也没有找到合适的解决方案,因为大多数问题只下载一次文件就完成了。

我想要实现的是拥有一个 API 作为代理来处理我的移动客户端的文件下载。因此,我需要快速响应/快速第一个字节响应,因为移动应用程序的超时时间相当短,为五秒。

    [HttpGet, Route("{id}")]
[Authorize(Policy = xxxxx)]
public async Task<FileStreamResult> Get(Guid tenantId, Guid id)
{
if (tenantId == default)
{
throw new ArgumentException($"Tenant id '{tenantId}' is not valid.");
}

if (id == default)
{
throw new ArgumentException($"Package id '{id}' is not valid.");
}

var assetPackage = await _assetPackageService.ReadPackage(myenum.myvalue, tenantId, id).ConfigureAwait(false);
if (assetPackage == null)
{
return File(new MemoryStream(), "application/octet-stream");
}
return File(assetPackage.FileStream, assetPackage.ContentType);
}
        public async Task<AssetPackage> ReadPackage(AssetPackageContent packageContent, Guid tenantId, Guid packageId)
{
var blobRepository = await _blobRepositoryFactory.CreateAsync(_settings, tenantId.ToString())
.ConfigureAwait(false);

var blobPath = string.Empty;

//some missing irrelevant code

var blobReference = await blobRepository.ReadBlobReference(blobPath).ConfigureAwait(false);

if (blobReference == null)
{
return null;
}

var stream = new MemoryStream();
await blobReference.DownloadToStreamAsync(stream).ConfigureAwait(false);
stream.Seek(0, SeekOrigin.Begin);
return new AssetPackage(packageContent, stream, blobReference.Properties.ContentType);
}

我知道 MemoryStream 对于下载和其他内容来说非常糟糕,因为它在将文件分发到客户端之前会将文件消耗到内存中。

你会如何解决这个问题?有没有一个简单的解决方案可以让我的 API 充当代理,而不是下载整个文件,然后让客户端从我的 api 再次下载它?

最佳答案

可能且有效的解决方案是 - as silent提到 - 将 Azure 存储添加到 Azure API 管理。您可以添加授权或使用 SAS 链接,这可能适合也可能不适合您的应用程序。

我关注了this guide设置我的架构并且它完美地工作。感谢沉默的最初想法。

关于C# API - 提供从 Azure Blob 存储下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69614401/

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