You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Microsoft.Azure.Storage.Blob的UploadTextAsync抛异常,旧版本却正常?

新旧Azure Blob存储库上传报错“指定的资源不存在”排查原因

问题描述

我们有一段基于旧版Microsoft.WindowsAzure.Storage.Blob库的遗留代码,功能是向Azure存储账户上传字符串到Blob;现在改用新版Microsoft.Azure.Storage.Blob库,两个库都提供CloudBlockBlob.UploadTextAsync方法,代码逻辑完全一致,核心调用如下:

await new CloudBlockBlob(new Uri(string.Format("[SAS]", "[blobName]"))).UploadTextAsync("[content]");

其中占位符说明:

  • [SAS]:替换为Azure存储账户的SAS令牌
  • [blobName]:替换为要创建的Blob名称
  • [content]:替换为Blob内容

旧版代码运行正常,但新版代码抛出Microsoft.Azure.Storage.StorageException,提示“指定的资源不存在”。Azure存储账户、网络配置及SAS令牌均未变更,可能的原因如下:

可能的原因

  • SAS令牌拼接格式问题
    旧版库对SAS令牌的格式容错性更高,比如允许SAS令牌末尾没有/,而新版库在拼接Blob URI时,如果SAS令牌末尾缺少/,会导致Blob名称被直接拼接在SAS参数后面,形成错误的资源路径(例如SAS为https://xxx.blob.core.windows.net/cont?sas...,拼接后变成https://xxx.blob.core.windows.net/cont?sas...blobName,而非正确的https://xxx.blob.core.windows.net/cont/blobName?sas...),导致无法识别目标资源。

  • 容器存在性校验逻辑变更
    新版库对容器的存在性校验更严格:即使SAS令牌拥有创建Blob的权限,若目标容器不存在,旧版库可能会自动尝试创建容器(取决于权限配置),但新版库会直接抛出“资源不存在”的异常。需确认目标容器是否确实存在,或SAS令牌是否包含容器级别的创建权限。

  • URI编码规则差异
    新版库对URI的编码规则更严格,若Blob名称包含特殊字符(如空格、中文、特殊符号),旧版库可能自动处理了编码,而新版库需要显式对Blob名称进行URL编码,否则拼接后的URI无效,导致无法定位资源。

  • API版本兼容性问题
    新版Microsoft.Azure.Storage.Blob库默认使用更高版本的REST API,而旧版库使用的API版本较低。如果存储账户的某些配置(如软删除、分层命名空间)在高API版本下有不同的行为,可能导致资源识别异常。可尝试在创建CloudBlockBlob时指定与旧版库相同的API版本来验证。

内容的提问来源于stack exchange,提问作者Pine Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:15:40