Azure.Storage.Blobs 12.10使用SAS令牌上传Blob问题求助
Azure.Storage.Blobs 12.10版本SAS令牌场景适配方案
核心问题原因
你在12.10版本代码中给BlobClient构造函数传入的第二个null参数会覆盖Uri自带的SAS认证信息,导致认证失败;额外的BlobUriBuilder转换不是必要操作,也可能因Uri解析异常引发问题。
适配后代码示例
上传功能
var name = Guid.NewGuid().ToString(); // 直接拼接带SAS令牌的完整Blob访问Uri,注意subToken不要重复带?前缀 var fullBlobUri = new Uri($"https://MyStorageAccount.blob.core.windows.net/myimages/{App.User.EmailAddress}/{name}.jpg?{subToken}"); // 仅传入带SAS的Uri构造BlobClient即可 var blobClient = new BlobClient(fullBlobUri); using var uploadStream = File.OpenRead(file.Path); await blobClient.UploadAsync(uploadStream); // using关键字会自动释放流,不需要手动调用Close方法
删除功能
// 拼接待删除Blob的带SAS完整Uri,SAS需提前授予删除权限 var deleteBlobUri = new Uri($"https://MyStorageAccount.blob.core.windows.net/myimages/{App.User.EmailAddress}/目标Blob名称.jpg?{subToken}"); var deleteBlobClient = new BlobClient(deleteBlobUri); await deleteBlobClient.DeleteAsync();
注意事项
- 预生成的SAS令牌需要匹配操作权限:上传需开启写入权限,删除需开启删除权限,且令牌有效期需覆盖操作时间
- 拼接Uri时如果
subToken已经自带?前缀,需要去掉拼接语句中的?,避免出现双?导致SAS解析失效 - 若需要额外配置请求超时、重试策略等参数,可传入自定义的
BlobClientOptions作为第二个参数,不会影响SAS认证的识别
内容的提问来源于stack exchange,提问作者John Norton
相关产品推荐
相关产品推荐

