代码之家  ›  专栏  ›  技术社区  ›  Dannick Montanede

'响应标头必须包含标头',u'位置'

  •  1
  • Dannick Montanede  · 技术社区  · 7 年前

    我尝试使用可恢复上传将视频上传到Google云存储桶中。 但我总是有相同的错误:(u'Response headers必须包含header',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 回复  |  直到 7 年前
        1
  •  1
  •   Druta Ruslan    7 年前

    你的问题可能在

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

    检查立柱 here ,他们使用

    # Create a Resumable Upload
    url = (
      f'https://www.googleapis.com/upload/storage/v1/b/'
      f'{bucket.name}/o?uploadType=resumable'
    )
    
        2
  •  0
  •   H. Buseyne    5 年前

    您的问题很可能与授权有关。这里的问题是

    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结果。