gpt4 book ai didi

c# - 在 C# 中的私有(private)访问下下载 azure 存储 blob 时遇到问题

转载 作者:行者123 更新时间:2023-12-02 23:56:55 25 4
gpt4 key购买 nike

我是一个 C# 菜鸟,对 azure api 知之甚少,而且我还是一名正在做工作项目的 cs 学生。我使用 youtube 教程构建了一些中间件,使用字符串连接对存储帐户进行身份验证,并枚举、上传、下载和删除容器内的 blob。我遇到的问题仅在于下载功能,并且仅当存储帐户访问权限设置为私有(private)时。此功能适用于匿名访问。我怀疑问题出在附加网址上,我不知道如何解决它。如果重要的话,blob 主要是 csv 数据。任何对资源的帮助或指导将不胜感激,这里是相关代码:

url函数

public async Task<string> GetBlob(string name, string containerName)
{
var containerClient = _blobClient.GetBlobContainerClient(containerName);
var blobClient = containerClient.GetBlobClient(name);
return blobClient.Uri.AbsoluteUri;

}

配置文件

  "AllowedHosts": "*",
"BlobConnection" : "<mystringconnection>******==;EndpointSuffix=core.windows.net"

操作请求

[HttpGet]
public async Task<IActionResult> ViewFile(string name)
{
var res = await _blobService.GetBlob(name, "<mystorageacc>");
return Redirect(res);
}

最佳答案

您无法从私有(private)容器下载 blob 的原因是您只是从方法中返回 blob 的 URL,而没有任何授权信息。访问私有(private)容器中的 blob 的请求必须获得授权。

您需要做的是创建一个 Shared Access Signature (SAS)至少具有读取权限,然后返回该 SAS URL。您想要使用的方法是 GenerateSasUri 。您的代码将类似于:

public async Task<string> GetBlob(string name, string containerName)
{
var containerClient = _blobClient.GetBlobContainerClient(containerName);
var blobClient = containerClient.GetBlobClient(name);
return blobClient.GenerateSasUri(BlobSasPermissions.Read, DateTime.UtcNow.AddMinutes(5)).Uri.AbsoluteUri;
}

这将为您提供一个链接,该链接自创建之日起 5 分钟内有效,并且有权读取(下载)该 blob。

关于c# - 在 C# 中的私有(private)访问下下载 azure 存储 blob 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70780265/

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