我想使用带有 x-ms-copy-source 标头的 PUT REST API 将大文件(可通过 Internet 公开访问)上传到 Azure blob。 PUT uri 包含 SAS 令牌,我使用这些标头:
x-ms-version: 2023-11-03
x-ms-blob-type: BlockBlob
x-ms-copy-source: https://mypublicfile/filename.csv
效果很好。但是 documentation 指出还应该添加 x-ms-requires-sync:true 标头并且是必需的。但是当我添加这个时,我收到这个错误:
<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>InvalidHeaderValue</Code>
<Message>The value for one of the HTTP headers is not in the correct format.
RequestId:935f1ff5-a01e-0065-6f34-80e89b000000
Time:2024-03-27T10:51:11.7886167Z</Message>
<HeaderName>x-ms-requires-sync</HeaderName>
<HeaderValue>true</HeaderValue>
</Error>
知道我做错了什么吗?
除此之外,是否有任何大小限制(除了此处所述的明显最大斑点大小之外)。 高达 5GiB 似乎工作正常,但大文件会出错。
<Message>The value for one of the HTTP headers is not in the correct format.</Message> <HeaderName>x-ms-requires-sync</HeaderName> <HeaderValue>true</HeaderValue> </Error>
上述错误表明从 URL 复制 blob 不需要
x-ms-requires-sync
标头。该标头用于指定复制操作是否应该同步。
复制 blob 操作默认是异步的。因此,您可以从请求中删除
x-ms-requires-sync
标头。
因此,我也尝试在我的请求中不使用
x-ms-requires-sync
,并且执行成功。
邮递员:
传送门:
关于你的第二个问题,大小限制,在单个请求中可以上传的块 blob 的最大大小是
256 MB.
如果您需要上传更大的 blob,您可以将其分成更小的块或块并并行上传。
您可以使用 Put block from url 请求上传大文件,这些文件会将 blob 分解为块,然后使用该请求上传块。然后,您需要在上传所有块后使用 Put Block List 提交这些块。
参考:
如何使用带有 SaS Url 的 PUT 直接从浏览器将大文件 (~10GB) 上传到 Azure Blob 存储? - Stack Overflow,作者:Gaurav Mantri。