【发布时间】:2014-05-23 10:34:15
【问题描述】:
我正在尝试使用 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 中的任何代码?
我应该直接从 GetSasForBlob 调用 DownloadFileTest 吗?
如何保护这两个功能,使人们无法在视图之外访问它们?它们现在都是静态函数。我猜这不安全?
【问题讨论】: