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

Azure Python SDK存储备份脚本处理$web容器时报无效字符错误

问题根因

Azure Blob存储仅允许系统内置的特殊容器(如静态网站专用的$web、日志容器$logs等)使用$作为名称前缀,用户自定义创建容器时,命名规则要求必须以小写字母或数字开头,不可包含$等特殊字符。
你代码中直接将源容器名与today变量拼接作为目标容器名,当源容器为$web时,生成的$web+日期格式的名称不符合自定义容器命名规范,因此抛出The Resource contains an invalid character错误。

解决方案

你可以根据需求选择以下任意一种处理方式:

方式1:转换特殊容器名(保留原始内容)

对带$前缀的系统容器名做预处理后再拼接日期,生成合法的目标容器名,修改对应代码行即可:

# 原代码:target_destination_blob = container['name'] + today
# 修改为:先移除名称开头的$符号
processed_container_name = container['name'].lstrip('$')
target_destination_blob = processed_container_name + today

如果需要保留$web的标识,也可以将$替换为合法的下划线字符:

processed_container_name = container['name'].replace('$', '_')
target_destination_blob = processed_container_name + today

方式2:过滤系统容器(不需要复制特殊容器时使用)

如果不需要复制$web这类系统内置容器,可以直接在遍历容器时跳过所有$开头的容器:

for container in all_containers:
    # 新增过滤逻辑,跳过系统容器
    if container['name'].startswith('$'):
        continue
    # 后续原有逻辑保持不变

额外优化建议

  • 你代码中重复初始化了两次BlobServiceClient,可以删除冗余的初始化代码,减少不必要的资源消耗
  • 你注释了异常捕获逻辑,建议恢复并完善异常处理,避免单个Blob/表复制失败导致整个脚本终止
  • 复制操作是异步的,建议增加复制状态校验逻辑,避免复制失败未被感知

内容的提问来源于stack exchange,提问作者Nayden Van

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:15:02