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

使用PageBlobClient上传Azure PageBlob遇认证及HTTP头错误如何解决

问题解决思路

我们逐个拆解两个错误的根因,对应给出修复方案:

一、403认证错误根因及修复

  • 你生成的容器SAS权限仅为只读:从SAS参数sp=r可以看出,生成SAS时只勾选了读取(r)权限,写入操作需要在生成SAS时额外勾选写入(w)权限,权限参数应为sp=rw。
  • PageBlobClient需要传入指向具体页Blob的URI,你之前直接传入容器级SAS URI属于用法错误,需要在容器SAS URI后拼接你要操作的Blob名称,比如https://storageaccountname.blob.core.windows.net/containername/blobname?[你的SAS参数]。

二、400参数错误根因及修复

页Blob有严格的写入规则限制:

  • 写入的内容长度、起始偏移量必须是512字节的整数倍,你当前写入的"hello world"仅11字节,长度不符合要求,所以触发x-ms-range头校验失败。
  • 写入数据前必须先调用Create方法创建指定大小的页Blob,页Blob的总大小也必须是512字节的整数倍,不能直接调用UploadPages写入数据。

三、可选优化方案

如果你只是需要存储普通字符串,没有随机读写的强需求,建议直接使用块Blob,无需遵循512字节对齐规则,使用更简单:

块Blob修正代码示例

// 注意SAS生成时要勾选写入权限,URI后拼接你要创建的块Blob名称
var sasUriStr = "https://storageaccountname.blob.core.windows.net/containername/yourblobname?sp=rw&st=2021-08-10T00:34:00Z&se=2021-08-15T08:34:00Z&spr=https&sv=2020-08-04&sr=c&sig=ABCDEFGH/YJKLMNOP=";
var uri = new Uri(sasUriStr);
var blockBlobClient = new BlockBlobClient(uri);
// 块Blob直接上传即可,无需对齐要求
blockBlobClient.Upload(new MemoryStream(Encoding.UTF8.GetBytes("hello world")), overwrite: true);

必须使用页Blob的修正代码示例

var sasUriStr = "https://storageaccountname.blob.core.windows.net/containername/yourpageblobname?sp=rw&st=2021-08-10T00:34:00Z&se=2021-08-15T08:34:00Z&spr=https&sv=2020-08-04&sr=c&sig=ABCDEFGH/YJKLMNOP=";
var uri = new Uri(sasUriStr);
var pageBlobClient = new PageBlobClient(uri);
// 先创建1KB大小的页Blob(1024是512的整数倍)
pageBlobClient.Create(1024);
// 构造512字节的写入内容,不足部分补0
var content = Encoding.UTF8.GetBytes("hello world");
var alignedContent = new byte[512];
Array.Copy(content, alignedContent, content.Length);
// 偏移量0对齐512,写入512字节内容
pageBlobClient.UploadPages(new MemoryStream(alignedContent), 0);

内容的提问来源于stack exchange,提问作者Node.JS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:39:01