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

使用JavaScript上传至Azure Blob Storage失败问题排查求助

解决Azure Blob Storage上传时的400 Bad Request(预检请求失败)问题

针对你遇到的问题,虽然已经配置了允许*的CORS规则,但还是出现预检请求失败+400错误,我整理了几个最可能的排查方向和解决办法:

1. 检查Blob容器的URL结构与权限

  • 首先确认你的请求URL格式是否正确:Azure Blob的URL格式应为 https://<存储账户名>.blob.core.windows.net/<容器名>/<Blob文件名>。从你给出的报错URL来看,末尾的Blob路径似乎不完整(3d7959e4-a48d-447b-a919-),这可能直接导致400错误。
  • 检查容器的访问权限:如果是前端直接上传,私有容器会拒绝未授权的请求。你可以临时将容器权限改为Blob(匿名读取访问)测试,或者确保请求中携带了有效的SAS Token(包含PUT权限)或Azure AD令牌。

2. 细化CORS规则配置(别只依赖*)

即使你设置了允许*,也可能因为某些规则细节遗漏导致预检失败:

  • 确保Allowed Methods包含PUT(上传Blob需要PUT方法),如果还有其他操作(比如OPTIONS、GET)也一并添加。
  • Allowed Headers和Exposed Headers都设置为*,避免预检请求中的自定义Header被拦截。
  • 确认Max Age设置足够大(比如86400),避免浏览器频繁发送预检请求。
  • 保存规则后,等待1-2分钟让配置生效(Azure存储的CORS规则可能有延迟)。

3. 检查前端请求的细节

  • 确认请求方法是PUT,而不是POST或其他方法(前端上传Blob通常用PUT)。
  • 确保设置了正确的Content-Type(比如视频文件的video/mp4、video/avi等),如果未设置或设置错误,Blob存储会返回400。
  • 检查请求中是否携带了不必要的自定义Header,如果有,需要在CORS的Allowed Headers中明确添加(或者暂时移除测试)。

4. 排查请求签名问题(如果用SAS/AD授权)

  • 如果你使用SAS Token上传,确保Token包含w(写入)权限,并且有效期未过期。同时,SAS Token要正确拼接在URL末尾(格式:?sv=xxxx&ss=xxxx&srt=xxxx&sp=xxxx&se=xxxx&st=xxxx&spr=https&sig=xxxx)。
  • 如果使用Azure AD令牌,确保令牌的受众是https://storage.azure.com/,并且有Storage Blob Data Contributor等相关权限。

你可以先从URL格式和容器权限入手排查,这两个是最容易忽略的点。如果还是有问题,可以在浏览器开发者工具中查看完整的预检请求(OPTIONS)和响应详情,里面会有更具体的错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:32:41