Azure Functions不使用Azure包能否实现Blob Storage追加操作
Azure Functions 无SDK追加Blob Storage内容方案
默认配置下Azure Functions的Blob输出绑定仅支持新建、覆盖Blob文件,不支持对已有文件执行内容追加。如果要求不引入任何Azure相关专属依赖包,完全可以通过直接调用Blob Storage原生REST接口的方式实现追加,具体方案如下:
前置前提
- 目标文件必须提前创建为**追加Blob(Append Blob)**类型:Azure Blob Storage的普通块Blob本身不支持追加写入,无论用什么方式都无法直接对块Blob执行追加操作,必须先将目标文件创建为追加Blob类型。
- 不需要安装任何Azure.Storage.Blobs之类的官方SDK包,仅使用开发语言自带的HTTP客户端、加密库即可完成全部操作。
实现逻辑
核心是直接调用Blob Storage的追加块REST接口完成写入,全程绕过Functions的Blob输出绑定,不需要依赖专属SDK。
具体操作步骤
- 构造请求地址:接口固定格式为
https://<你的存储账户名>.blob.core.windows.net/<容器名称>/<目标追加Blob文件名>?comp=appendblock,请求方法使用PUT。 - 配置请求头:必填头信息如下
Authorization:两种生成方式可选,都不需要Azure SDK:- 共享密钥方式:用存储账户密钥对请求内容做HMAC-SHA256签名,所有主流语言标准库都自带HMAC-SHA256加密能力,按照Azure Storage公开的签名规则生成即可
- 托管标识方式:给Function配置系统托管标识并分配存储账户的写入权限,直接调用Function运行环境本地的托管标识元数据接口拿到访问令牌,作为Bearer凭证填入授权头即可,不需要自己处理签名逻辑,配置更简单
x-ms-date:符合RFC 1123格式的UTC请求时间x-ms-version:指定存储服务版本,填入2020-10-02即可兼容绝大多数场景Content-Length:本次要追加的内容字节长度
- 发送请求:将需要追加的内容直接放在HTTP请求体中发送,接口返回201状态码即代表追加成功。
注意事项
- 不要用默认Blob输出绑定操作追加Blob:输出绑定的默认写入逻辑是全量覆盖文件,哪怕目标是追加Blob,用输出绑定写入也会直接清空原有内容,必须完全绕过绑定直接发HTTP请求。
- 单次请求追加的内容大小不能超过4MB,如果要追加的内容超过4MB,拆分成多次调用接口即可。
- 如果追加过程中出现权限错误,优先检查授权签名/托管标识的角色配置是否正确,不需要额外调整Function的绑定配置。
内容的提问来源于stack exchange,提问作者Vladimir Mironov
相关产品推荐
相关产品推荐

