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/

相关问题