Ошибка API-интерфейса REST API файловой службы Azure «PUT Range» InvalidHeaderValue - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь загрузить файл в файловую службу Azure с помощью REST API.После создания файла запрос 'put range' завершается неудачно с 'InvalidHeaderValue'

. До сих пор я успешно создал файл, используя документацию, найденную здесь.https://docs.microsoft.com/en-us/rest/api/storageservices/create-file

После этого я пытаюсь поместить содержимое во вновь созданный файл, следуя документации, найденной здесь.https://docs.microsoft.com/en-us/rest/api/storageservices/put-range

вот пример URI, который я использую.Это выглядит правильно рядом с примером в документе.

uri = 'https://<account>.file.core.windows.net/<share>/<directory>/<file>?comp=range&<sas token>'

Я получаю содержимое файла с ...

with open(file.txt, mode='rb') as fh:
    data = fh.read()

Мои заголовки выглядят так ...

headers = {
    'x-ms-write':'update',
    'x-ms-date':'Wed, 10  Apr 2019 22:14:17 GMT',
    'x-ms-version':'2018-03-28',
    'x-ms-range':'bytes=0-' + str(len(data)),
    'Content-Length':str(len(data) + 1)
}

Запрос ...

requests.put(url, headers=headers, data=data)

Код ответа, который я получаю, - 400, а возвращаемый заголовок - это ...

{
'Content-Length': '322', 
'Content-Type': 'application/xml', 
'Server': 'Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0', 
'x-ms-request-id': '23642a26-e01a-0049-35da-ef0109000000', 
'x-ms-version': '2018-03-28', 
'x-ms-error-code': 'InvalidHeaderValue', 
'Date': 'Wed, 10 Apr 2019 20:14:46 GMT'
}

Спасибо за помощьзаранее.

1 Ответ

0 голосов
/ 12 апреля 2019

Ошибка связана с неправильным значением x-ms-range и Content-Length.

Правильный вариант должен выглядеть ниже:

headers={
    #other headers
    'x-ms-range':'bytes=0-' + str(len(data)-1),
    'Content-Length':str(len(data))    
}

Мой пример кода, как показано ниже, и отлично работает:

import requests

uri = r'https://xxx.file.core.windows.net/test/good222.txt?comp=range&sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-04-12T10:59:42Z&st=2019-04-12T02:59:42Z&spr=https&sig=xxxxxxxxxx'

with open("D:\\hello.txt",mode='rb') as fh:
    data = fh.read()

print(len(data))
headers={
    'x-ms-write':'update',
    'x-ms-date':'Fri, 12 Apr 2019 06:40:14 GMT',
    'x-ms-version':'2018-03-28',
    'x-ms-range':'bytes=0-' + str(len(data)-1),
    'Content-Length':str(len(data))    
}

r= requests.put(uri,data=data,headers=headers)
print(r.status_code)
print(r.headers)

Результат (файл также обновлен на портале Azure):

enter image description here

Обратите также внимание, что длина файла (локально) не должна превышать длину, которую вы хотите обновить в общей папке Azure.

...