Azure存储:如何使用Rest API向文件共享上传Word/CSV等文件
报错问题解决
你遇到的InvalidAuthenticationInfo报错是授权方式混用导致的:
- 你已经生成了SAS令牌,就不需要在请求头里加
Authorization: SharedKey字段,直接把完整SAS令牌拼接在请求URL末尾即可。 - 如果你坚持使用SharedKey授权,需要按照Azure官方签名规则自行计算请求签名,不能直接填充占位密钥,对新手来说优先用SAS令牌更简单,无需自行计算签名。
完整上传文件操作流程
你现在调用的是Azure Files服务的REST API,上传文件需要分两步完成:
第一步:创建空文件占位
调用Create File接口,请求结构如下:
PUT https://mystorageaccount.file.core.windows.net/sharedname/subdir/BlobTesting.txt?[你的SAS令牌] HTTP/1.1 Host: mystorageaccount.file.core.windows.net x-ms-type: file x-ms-file-permission: inherit x-ms-file-attributes: ReadOnly x-ms-file-creation-time: now x-ms-file-last-write-time: now x-ms-content-length: [实际文件的总字节数] Date: Wed, 08 Sep 2021 23:23:20 GMT x-ms-version: 2020-04-08
这里的x-ms-content-length必须和你最终要上传的文件实际大小完全一致。
第二步:上传实际文件内容
调用Put Range接口上传内容,请求结构如下:
PUT https://mystorageaccount.file.core.windows.net/sharedname/subdir/BlobTesting.txt?[你的SAS令牌]&comp=range HTTP/1.1 Host: mystorageaccount.file.core.windows.net x-ms-write: update x-ms-range: bytes=0-[实际文件总字节数-1] Content-Length: [本次上传的内容字节数] Date: Wed, 08 Sep 2021 23:23:20 GMT x-ms-version: 2020-04-08 [请求体填写你要上传的文件二进制/文本内容]
如果是大文件,可以拆分为多个数据块,分别调用Put Range接口上传不同的字节区间即可。
注意事项
- 生成SAS令牌时需要确认已经给目标文件共享开通了写入权限,且有效期覆盖当前请求时间。
- 如果你使用的是Blob存储而非文件共享,接口规则会有差异,当前你使用的
file.core.windows.net是文件存储服务的域名,和你创建的文件共享资源是匹配的。
内容的提问来源于stack exchange,提问作者2437850
相关产品推荐
相关产品推荐

