0

我有一個託管視頻的應用程序,我們最近遷移到了Azure。如何設置個人天藍色blob請求上的內容處置?

在我們的舊應用程序中,我們賦予用戶播放或下載視頻的能力。但是,在Azure上,似乎必須選擇我想要的功能,因爲必須在文件上設置內容處置,而不是在請求上設置內容處置。

到目前爲止,我已經想出了兩個非常差的解決方案。

第一個解決方案是通過我的MVC服務器流式傳輸下載。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 
         CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
         CloudBlobContainer container = blobClient.GetContainerReference("videos"); 
         string userFileName = service.FirstName + service.LastName + "Video.mp4"; 
         Response.AddHeader("Content-Disposition", "attachment; filename=" + userFileName); // force download 
         container.GetBlobReference(service.Video.ConvertedFilePath).DownloadToStream(Response.OutputStream); 
         return new EmptyResult(); 

此選項工作好於小視頻,但它是我的服務器上非常繁重。對於較大的視頻,操作超時。

第二個選項是託管每個視頻兩次。

這個選項顯然是不好的,因爲我將不得不支付雙倍的存儲成本。

回答

0

據我所知,azure blob存儲不支持將自定義頭添加到特殊容器。

我建議你可以關注這個feedback並投票支持蔚藍開發團隊來支持這個功能。

這是一種解決方法,您可以先壓縮視頻文件,然後上傳到azure blob存儲。

它不會被瀏覽器打開。

1

但是在Azure上,好像我要挑哪個 功能之間我想,作爲內容配置有要在 文件,而不是在請求中設置。

這是一個解決方法。正如你可能知道的那樣,你可以在blob上定義一個Content-Disposition屬性。但是,當您爲此屬性定義值時,它將始終應用於該Blob。當你想在blob上有選擇地應用這個屬性(比如說,基於每個請求)時,你要做的是在該blob上創建一個Shared Access Signature (SAS),並在那裏覆蓋這個請求頭。然後,您可以通過SAS URL提供blob。

這裏的示例代碼如下:

 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
     CloudBlobContainer container = blobClient.GetContainerReference("videos"); 
     string userFileName = service.FirstName + service.LastName + "Video.mp4"; 
     CloudBlockBlob blob = container.GetBlockBlobReference(userFileName); 
     SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy() 
     { 
      Permissions = SharedAccessBlobPermissions.Read, 
      SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1) 
     }; 
     SharedAccessBlobHeaders blobHeaders = new SharedAccessBlobHeaders() 
     { 
      ContentDisposition = "attachment; filename=" + userFileName 
     }; 
     string sasToken = blob.GetSharedAccessSignature(policy, blobHeaders); 
     var sasUrl = blob.Uri.AbsoluteUri + sasToken;//This is the URL you will use. It will force the user to download the video. 

我以前寫的一篇博客文章同樣長的時間,你可能會發現有用:http://gauravmantri.com/2013/11/28/new-changes-to-windows-azure-storage-a-perfect-thanksgiving-gift/

相關問題