如何从Microsoft.WindowsAzure.Storage升级到Azure.Storage.Common?
Azure Blob存储视频服务从WindowsAzure.Storage迁移至Azure.Storage.Blobs教程及代码示例
背景
在MVC应用中使用Microsoft.WindowsAzure.Storage实现了Azure Blob存储的视频流服务,该包已在2023年3月31日弃用,需升级至官方推荐的Azure.Storage.Blobs包(注:微软提及的Azure.Storage.Common是基础依赖,实际Blob操作需安装Azure.Storage.Blobs)。以下是完整的迁移步骤及代码转换示例。
迁移步骤
- 卸载旧NuGet包:
Microsoft.WindowsAzure.Storage - 安装新NuGet包:
Azure.Storage.Blobs(会自动引入Azure.Storage.Common等依赖) - 替换代码中的命名空间
- 调整Blob客户端、容器、Blob实例的初始化逻辑
- 更新SAS Token生成方式
转换后的控制器代码
using System; using System.Configuration; using System.Web.Mvc; // 替换为新的命名空间 using Azure.Storage; using Azure.Storage.Blobs; using Azure.Storage.Sas; namespace MyPlatform.Controllers { [Authorize(Roles = "Admin")] public class MyController : Controller { /// <summary> /// 视频流测试页面 /// </summary> /// <returns>Videos视图</returns> public ActionResult Videos() { // 从Web.config读取配置 string accountName = ConfigurationManager.AppSettings["Storage:AccountName"]; string keyValue = ConfigurationManager.AppSettings["Storage:KeyValue"]; string containerName = ConfigurationManager.AppSettings["Storage:ContainerName"]; string videoName = ConfigurationManager.AppSettings["Storage:VideoName"]; // 初始化存储凭据 var credentials = new StorageSharedKeyCredential(accountName, keyValue); // 构建Blob服务客户端 var blobServiceClient = new BlobServiceClient( new Uri($"https://{accountName}.blob.core.windows.net"), credentials); // 获取容器引用 var containerClient = blobServiceClient.GetBlobContainerClient(containerName); // 获取Blob引用 var blobClient = containerClient.GetBlobClient(videoName); // 生成SAS Token var sasBuilder = new BlobSasBuilder() { BlobContainerName = containerName, BlobName = videoName, ExpiresOn = DateTime.UtcNow.AddHours(1), Protocol = SasProtocol.Https // 强制使用HTTPS }; // 设置读取权限 sasBuilder.SetPermissions(BlobSasPermissions.Read); // 生成SAS Token字符串 string sasToken = sasBuilder.ToSasQueryParameters(credentials).ToString(); // 构建完整的视频访问URL string videoUrl = $"{blobClient.Uri}?{sasToken}"; ViewData["Video"] = videoUrl; return View(); } } }
视图代码(无需修改)
@{ ViewBag.Title = "Videos"; Layout = "~/Views/Shared/_MyLayout.cshtml"; var videoUrl = (string)ViewData["Video"]; } <h2>Videos</h2> <p>视频流测试页面</p> <video controls controlslist="nodownload" disablepictureinpicture> <source src=@videoUrl type="video/mp4"> </video>
关键变化说明
- 命名空间:从
Microsoft.WindowsAzure.Storage.*替换为Azure.Storage.*和Azure.Storage.Blobs.* - 凭据初始化:使用
StorageSharedKeyCredential替代旧的StorageCredentials - 客户端初始化:直接构建
BlobServiceClient,不再通过CloudStorageAccount创建客户端 - SAS Token生成:使用
BlobSasBuilder替代旧的SharedAccessBlobPolicy,API更直观且支持更多配置项 - URL构建:SAS Token需要以
?拼接在Blob URI后,旧版本直接拼接的方式不再适用
内容的提问来源于stack exchange,提问作者Martin Vaughan
相关产品推荐
相关产品推荐

