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

Java Spring用SAS令牌传文件到Azure Blob存储遇签名不匹配问题求助

解决Azure Blob存储SAS令牌签名不匹配问题

针对你遇到的Signature did not match错误,结合代码和SAS参数,以下是具体排查和修复步骤:

1. 修正SAS令牌的sr参数

你的SAS令牌中sr=d(代表Directory),但你是直接上传到容器下的Blob,参数不匹配。根据操作场景,应将sr改为:

  • sr=c:容器级别SAS,允许对容器内Blob进行操作
  • sr=b:Blob级别SAS(针对单个Blob的场景)

修改后的SAS URI示例:
https://domain.blob.core.windows.net/containerName/?sv=2022-11-02&se=2023-10-17T04%3A29%3A52z&sr=c&sp=w&sdd=1&sig=xxxxxxxxxxxx

2. 修复SAS有效期格式错误

你的SAS令牌中se参数是2023-10-17To4%3A29%3A52z,其中o是拼写错误,应改为T(ISO 8601格式的时间分隔符),修正为2023-10-17T04%3A29%3A52z,否则服务端会解析有效期失败,导致签名验证不通过。

3. 修正代码中的文件路径引号

代码里uploadFromFile(“File”)使用了中文引号,会导致编译错误或文件路径识别失败,替换为英文双引号:

blobClient.uploadFromFile("File");

同时确保"File"是正确的本地文件路径(比如"/path/to/your/local/file.txt")。

4. 验证SAS令牌权限范围

确认sp=w权限足够:w权限允许创建、写入、覆盖Blob,满足上传需求。如果后续需要读取等操作,可扩展为sp=wr,当前场景w已足够。

5. 优化BlobClient构造方式

如果使用容器级SAS URI,推荐通过BlobContainerClient获取BlobClient,逻辑更清晰:

BlobContainerClient containerClient = new BlobContainerClientBuilder()
    .endpoint(sasTokenUri)
    .buildClient();
BlobClient blobClient = containerClient.getBlobClient(blobName);
blobClient.uploadFromFile("/path/to/local/file");

完成以上修正后重新测试,即可解决签名不匹配问题。

内容的提问来源于stack exchange,提问作者Dev-eloper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:07:46