Azure文件存储putRange操作失败,出现416:InvalidHeaderValue(Content-Length)

时间:2019-02-22 22:27:03

标签: php azure azure-storage azure-sdk http-content-length

我正在使用Azure SDK在Azure文件存储上执行基本操作。为了支持更大的文件上传,我支持分块上传,所以我打电话:

cat在第一个块上,并且

$storage->createFileFromContent(...),位于以下所有位置。

第一个请求运行正常,并且在指定的第一个范围内填充了文件。但是,第二个及以下请求因错误而失败:

$storage->putFileRange(...)

这是我为第一个请求指定的标头:

Code: 416
Value: The range specified is invalid for the current size of the resource.

流的实际大小: 3000000

对于第二个请求:

{
  ["x-ms-range"]=>"bytes=0-2999999"
  ["content-length"]=>3000000
  ["x-ms-write"]=>"Update"
}

流的实际大小: 3000000

有人可以告诉我怎么了吗?我还尝试将范围调整为300000-6000000,但随后出现此错误:

”代码:400 值:HTTP标头之一的值格式不正确。 >>内容长度”

这可能是由于Azure中的存储配置错误引起的吗?

1 个答案:

答案 0 :(得分:1)

最有可能您没有将范围上传到实际上6000000字节长的文件中。 “放置范围”操作不会为您隐式扩展文件的大小。您需要显式调用SetFileProperties来首先调整文件大小。

$storage->createFileFromContent(...)会将文件大小设置为与内容相同的大小,因此很有可能不是6000000字节。

此外,如果范围和内容长度不匹配,例如在范围指定为3000001字节而内容长度为3000000字节的情况下,服务器将返回提到的400。