我在c#方面完全是个菜鸟,对azure apis知之甚少,我现在是一个正在做一个项目的cs学生,我用youtube教程构建了一些中间件,它使用一个字符串连接来验证一个存储帐户,它枚举,上传,下载,并删除容器中的Blob。问题是"我只在下载功能和存储帐户访问权限设置为私有时撒谎。这个功能在匿名访问下工作正常。我怀疑问题出在附加URL上,我不知道如何修复它。如果有问题的话,这些斑点主要是csv数据。任何帮助或资源方向都将非常感谢,这里是相关代码:🙂 here is the relevant code:
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);
}
3条答案
按热度按时间rqdpfwrv1#
无法从私有容器下载Blob的原因是,您只是从方法返回Blob的URL,而没有任何授权信息。必须授权访问私有容器中的Blob的请求。
您需要做的是创建一个至少具有
Read
权限的Shared Access Signature (SAS)
,然后返回该SAS URL。您要使用的方法是GenerateSasUri
。您的代码如下所示:这将为您提供一个链接,该链接在创建后5分钟内有效,并且具有读取(下载)blob的权限。
u5rb5r592#
如果要从blob服务下载;
如果你想从控制器下载文件字节数组,你可以选中这个;https://stackoverflow.com/a/3605510/3024129
如果要设置blob文件的公共访问级别;https://learn.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-configure.
请注意画面;
或者,您可以连接**Azure Storage Explorer**,并选择简单的方法。
第一节第一节第一节第二节第一节
我在谷歌上找到的图片,可能会有差异。:)
7fyelxc53#
这对我来说是有效的,返回一个字节数组: