请求正文太大,并且在生成sas令牌时超过了允许的最大限制



我使用以下脚本使用bash 生成sas令牌

sas_token=$(curl https://management.azure.com/subscriptions/$subscription_id/resourceGroups/$rg_name/providers/Microsoft.Storage/storageAccounts/$storage_account/listServiceSas/?api-version=2017-06-01 -X POST -d "{"canonicalizedResource":"/blob/$storage_account/$sa_container","signedResource":"c","signedPermission":"rcw","signedProtocol":"https","signedExpiry":"$(date -d '+30 minutes' +%FT%TZ)"}" -H "Authorization: Bearer $token" | jq -r '.serviceSasToken')

当我尝试上传一个500mb的大文件时,会出现以下错误请求正文太大,超出了允许的最大限度。67108864

从上面的脚本生成的sas令牌是:

sv=2015-04-05&sr=c&spr=https&se=2021-04-09T06%3A22%3A19.0000000Z&sp=racwdl&sig=xxxx

当我从azure门户生成sas令牌时,我会得到如下

sp=racwdl&st=2021-04-09T05:54:16Z&se=2021-04-09T13:54:16Z&spr=https&sv=2020-02-10&sr=c&sig=xxxx

在这里,如果你注意到签名的sv是2020-02-10,并且有了这个sas令牌,我可以上传大文件。

所以我注意到,在上面的两个sas令牌中,sv是不同的,所以我试图在我的代码中添加签名,就像下面的一样

sas_token=$(curl https://management.azure.com/subscriptions/$subscription_id/resourceGroups/$rg_name/providers/Microsoft.Storage/storageAccounts/$storage_account/listServiceSas/?api-version=2017-06-01 -X POST -d "{"canonicalizedResource":"/blob/$storage_account/$sa_container","signedResource":"c","signedPermission":"rcw","signedProtocol":"https","SignedVersion":"2020-02-10","signedExpiry":"$(date -d '+30 minutes' +%FT%TZ)"}" -H "Authorization: Bearer $token" | jq -r '.serviceSasToken')

但它仍然生成了一个带有2015-04-05的sv,而不是我指定的sv。

你能告诉我如何解决这个问题吗

我认为除了更改签名版本参数之外,您什么都做不了。

我的猜测是,通过Storage Resource Provider API生成SAS的实现使用Storage REST API版本2015-04-05(签名版本参数(,如果查看request body parameters,您会注意到请求中没有指定签名版本参数的参数。

你可以做的一件事是改变你的上传实现,以块的形式上传你的大blob,其中每个块的大小小于或等于64MB。

FWIW,在存储服务版本2016-05-31中,块大小限制从64 MB更改为100 MB:https://learn.microsoft.com/en-us/rest/api/storageservices/version-2016-05-31.

最新更新