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

将Blob存储及容器设为公开后,使用Curl命令上传Blob时出现404错误的技术求助

排查Azure Blob存储上传404错误的几个关键步骤

我之前也碰到过一模一样的问题,折腾了好一阵才捋清楚几个容易踩的坑,你可以挨个排查试试:

  • 死磕URL拼写细节:Azure Blob的存储账户名必须是全小写,容器名也只能用小写字母、数字和短横(不能有大写或特殊字符),文件名如果有空格或者特殊符号,得做URL编码(比如空格换成%20)。别小看拼写,我当初就是把容器名里的短横写成了下划线,找了半小时才发现。

  • 确认容器真的存在:有时候我们以为创建了容器,但可能名字拼写错了,或者创建过程中没成功。你可以登录Azure Portal直接查看,或者用Azure CLI命令az storage container list --account-name <your-storage-account>来验证容器是否存在,名字完全匹配。

  • 注意:公开容器权限不允许匿名上传:这是最容易踩的坑!你把容器设为container级别,只是允许匿名用户下载Blob,但上传操作不管容器是不是公开,都必须授权。你得在请求里加上SAS令牌(需要包含写入权限w)或者账户密钥:

    • 用SAS令牌的话,把令牌拼在URL后面,格式是https://<storage-account>.blob.core.windows.net/<container>/<file>?<sas-token>
    • 用账户密钥的话,给curl加一个请求头:-H "Authorization: SharedKey <storage-account-name>:<your-account-key>"
  • 检查本地文件路径和Blob命名:--upload-file后面的本地文件路径要正确,如果文件不在当前目录,得写绝对路径或者相对路径。另外,URL里的Blob名称(也就是<file>部分)要和你想上传的目标路径一致,比如想上传到容器下的子文件夹docs/test.txt,那URL就得写成<container-name>/docs/test.txt,Azure会自动创建不存在的文件夹。

  • 排查网络访问限制:如果你的存储账户设置了虚拟网络或IP白名单,那从不在允许列表里的IP发起的curl请求会被拦截,也可能返回404(其实是权限问题,但有时候错误提示会误导)。去Azure Portal的存储账户→网络设置里看看,是不是允许所有网络访问,或者把你的公网IP加进白名单。

给你两个正确的命令示例参考:

用SAS令牌上传

curl --upload-file local-file.txt --url "https://mystorage.blob.core.windows.net/mycontainer/uploaded-file.txt?sv=2023-11-03&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxxxxx"

用存储账户密钥上传

curl --upload-file local-file.txt -H "Authorization: SharedKey mystorage:xxxxxx" --url "https://mystorage.blob.core.windows.net/mycontainer/uploaded-file.txt"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:32:38