Azure SAS download blob
本文关键字:blob download SAS Azure | 更新日期: 2023-09-27 18:04:37
我正在试着用SAS下载一个blob,现在有点无能。
我列出了视图中所有属于的用户blob。当用户点击blob时,它应该开始下载它。
视图如下:
@foreach (var file in Model)
{
<a href='@Url.Action("GetSaSForBlob", "Folder", new { blob = file })>
</a>
}
这是我的两个功能位于"文件夹"控制器。
public void GetSaSForBlob(CloudBlockBlob blob)
{
var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(3),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write,
});
DownloadFileTest(string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas));
//return string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas);
}
static void DownloadFileTest(string blobSasUri)
{
CloudBlockBlob blob = new CloudBlockBlob(new Uri(blobSasUri));
using (MemoryStream ms = new MemoryStream())
{
blob.DownloadToStream(ms);
byte[] data = new byte[ms.Length];
ms.Position = 0;
ms.Read(data, 0, data.Length);
}
}
我应该传递什么从我的视图到GetSasForBlob?目前CloudBlockBlob blob为空
我在功能DownloadFileTest中缺少任何代码吗?
我应该直接从gettsasforblob调用DownloadFileTest吗?
如何保护这两个函数,使人们无法在视图外访问它们?它们现在都是静态函数。我猜那不安全吧?
1、您的file
在您的视图中的值是多少。我认为MVC不能基于你提供的文件创建CloudBlockBlob
对象。所以这可能是你得到CloudBlockBlob
中的null
的原因。
DownloadFileTest
中,您只需将blob的二进制文件下载到服务器的内存流中,这就是全部。如果需要让用户将其下载到本地磁盘,则需要将二进制文件放入Response.Stream
中。你可以直接使用blob.DownloadToStram(Response.Stream)
。
那由你决定。如果你愿意,你可以用同样的方法合并它们。
4,如果你想让用户通过你的web前端(网站或web服务)下载blob,就像你现在做的那样,你需要将你的blob容器设置为private
,并通过使用类似[Authorize]
的属性来保护你的网站或web服务。基本上在你的情况下,你根本不需要使用SAS,因为所有的下载请求都是通过你的web前端执行的。