'Заголовки ответа должны содержать заголовок', u'location ' - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь загрузить видео в корзину Google Cloud Storage с помощью возобновляемой загрузки.Но у меня всегда одна и та же ошибка: (заголовки u'Response должны содержать заголовок ', u'location')

Вот мой код:

client = _get_storage_client()
bucket = client.bucket(BUCKET_NAME, PROJECT_ID)
blob = bucket.blob(filename)

if 'video' in content_type:
    url = blob.create_resumable_upload_session(content_type=content_type, client=client)
    stream = io.BytesIO(stream_file.file.read())


    upload = ResumableUpload(
            upload_url=url,
            chunk_size=chunk_size
        )
    transport = AuthorizedSession(credentials=client._credentials)

    # Start using the Resumable Upload
    response = upload.initiate(
            transport=transport,
            content_type=content_type,
            stream=stream,
            metadata={'name': blob.name}
        )
    while upload.finished is False:
        upload.transmit_next_chunk(transport)

Ошибка появляется при загрузке.инициировать ()

Ответы [ 2 ]

0 голосов
/ 09 августа 2019

Ваша проблема, скорее всего, связана с авторизацией.Проблема здесь заключается в том, что строка

response = upload.initiate(
            transport=transport,
            content_type=content_type,
            stream=stream,
            metadata={'name': blob.name}
        )

не содержит ответа облака Google.Я бы посоветовал вам отладить этот оператор, если вы зайдете в этот оператор, вы найдете

        method, url, payload, headers = self._prepare_initiate_request(
            stream, metadata, content_type,
            total_bytes=total_bytes, stream_final=stream_final)
        result = _helpers.http_request(
            transport, method, url, data=payload, headers=headers,
            retry_strategy=self._retry_strategy)
        self._process_initiate_response(result)
        return result

Если вы проверите переменную 'result'.Он предоставит вам код состояния HTTP (403 для не авторизованных).Содержимое результата предоставит вам причину и требуемое право доступа.

Другой вариант - отправить запрос через прокси-сервер и проверить результат HTTP.

0 голосов
/ 18 мая 2018

Ваша проблема может быть в

url = blob.create_resumable_upload_session(content_type=content_type, 
client=client) 

проверьте сообщение здесь , они используют

# Create a Resumable Upload
url = (
  f'https://www.googleapis.com/upload/storage/v1/b/'
  f'{bucket.name}/o?uploadType=resumable'
)
...