簡體   English   中英

Azure SAS下載Blob

[英]Azure SAS download blob

我正在嘗試下載帶有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);
    }
}
  1. 我應該從我的觀點傳遞給GetSasForBlob? 目前,CloudBlockBlob blob為null。

  2. 我是否在函數DownloadFileTest中缺少任何代碼?

  3. 我應該直接從GetSasForBlob調用DownloadFileTest嗎?

  4. 我如何保護這兩個功能,使人們無法在視圖外部訪問它們? 它們現在都是靜態函數。 我猜這不安全嗎?

1,在您的視圖中file的值是多少。 我認為MVC不能根據您提供的文件創建CloudBlockBlob對象。 因此,這可能是你得到的原因null你的CloudBlockBlob

2,在DownloadFileTest您只需將Blob的二進制文件下載到服務器中的內存流中即可。 如果需要讓用戶將其下載到本地磁盤,則需要將二進制文件放入Response.Stream 您可以只使用blob.DownloadToStram(Response.Stream)類的東西。

3,這取決於您。 您可以根據需要以相同的方法合並它們。

4,如果您希望用戶通過您的Web前端(網站或Web服務)下載Blob(如您現在所做的那樣),則需要將Blob容器設置為private容器,並通過使用類似的方法來保護您的網站或Web服務的安全[Authorize]屬性。 從根本上來說,您實際上根本不需要使用SAS,因為所有下載請求都是通過Web前端執行的。

希望這個對你有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM