Операция putRange хранилища файлов Azure завершается с ошибкой 416: InvalidHeaderValue (Content-Length) - PullRequest
0 голосов
/ 23 февраля 2019

Я использую 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 не в правильном формате. >>Content-Length "

Может ли это быть вызвано неправильной конфигурацией хранилища в Azure?

1 Ответ

0 голосов
/ 24 февраля 2019

Скорее всего, вы не загружаете диапазоны в файл, который на самом деле имеет длину 6000000 байт.Операция Put Range не расширит размер файла для вас неявно.Вам необходимо явно вызвать SetFileProperties, чтобы сначала изменить размер файла.

$storage->createFileFromContent(...) установит размер файла равным размеру содержимого, поэтому, скорее всего, он не будет6000000 байт.

Кроме того, если имеется несоответствие в диапазоне и длине контента, например, в вашем случае, когда диапазон задает 3000001 байт, а длина контента составляет 3000000 байт, упомянутые 400 будут возвращены сервером.

...