Azure 文件存储 putRange 操作失败并显示 416:InvalidHeaderValue (Content-Length)

Posted

技术标签:

【中文标题】Azure 文件存储 putRange 操作失败并显示 416:InvalidHeaderValue (Content-Length)【英文标题】:Azure file storage putRange operation fails with 416: InvalidHeaderValue (Content-Length) 【发布时间】:2019-07-17 01:51:03 【问题描述】:

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

$storage->createFileFromContent(...) 在第一个块和

$storage->putFileRange(...) 以下所有内容。

第一个请求工作正常,文件在指定的第一个范围内填充。然而,第二个和以下请求失败并出现错误:

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

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


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

流的实际大小:3000000

对于第二个请求:


  ["x-ms-range"]=>"bytes=3000000-5999999"
  ["content-length"]=>3000000
  ["x-ms-write"]=>"Update"

流的实际大小:3000000

谁能告诉我什么是错的?我还尝试将范围调整为 300000-6000000 之类的值,但随后出现此错误:

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

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

【问题讨论】:

【参考方案1】:

您很可能没有将范围上传到实际长度为 6000000 字节的文件中。 Put Range 操作不会隐式地为您扩展文件的大小。您需要先显式调用SetFileProperties 来调整文件大小。

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

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

【讨论】:

以上是关于Azure 文件存储 putRange 操作失败并显示 416:InvalidHeaderValue (Content-Length)的主要内容,如果未能解决你的问题,请参考以下文章

将 Parquet 文件从 Azure 数据湖存储帐户复制到 Synapse 数据仓库表失败

Azure 部署中心的 CI/CD 失败,因为存储库名称必须小写

如何将文件从 azure 存储复制到 vm

Azure sql 数据库导出到存储 blob 失败

长时间运行的 Azure WebJob 失败 - 客户端无法在指定的超时时间内完成操作

Azure数据工厂复制字符串失败