0

私はビデオをホストするアプリケーションを持っており、最近Azureに移行しました。個々の紺碧のBLOBリクエストにコンテンツの配置を設定するには?

以前のアプリケーションでは、ユーザーがビデオを再生またはダウンロードできるようにしました。しかしAzureでは、コンテンツ処理をファイルに設定する必要があり、要求には設定しないで、必要な機能を選択する必要があるようです。

これまでのところ、私は2つの非常に貧しい解決策を考え出しました。

最初の解決策は、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(); 

このオプションは、小さな動画のために大丈夫動作しますが、それは非常に私のサーバー上で課税されます。より大きいビデオの場合、操作はタイムアウトします。

第2の選択肢は、すべての動画を2回ホスティングしています。

このオプションは明らかに悪いです。ストレージコストを2倍にしなければならないからです。

答えて

0

私が知る限り、紺碧のBLOBストレージはカスタムヘッダーを特別なコンテナに追加することをサポートしていません。

この機能をサポートするために、このfeedbackに投票して、azure開発チームを押し入れることをお勧めします。

これは回避策です。最初にビデオファイルを圧縮し、次に空白のBLOBストレージにアップロードすることができます。

ブラウザで開くことはできません。

1

私はコンテンツの配置が ファイルではなく、要求に設定しなければならないとして、私が欲しい 機能、その間を選択する必要がありますようにしかしAzureの上に思えます。

解決策があります。ご存知のように、ブロブに定義できるContent-Dispositionプロパティがあります。ただし、このプロパティの値を定義すると、常にその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/

関連する問題