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

Я использую 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?


person Hustensaft    schedule 22.02.2019    source источник


Ответы (1)


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

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

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

person katmsft    schedule 24.02.2019