使用googlecloudstorage Python客户端获取下载头?

2024-09-28 03:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用google-cloud-storagePython客户端下载Google云存储blob时,如何获取它的头文件(特别是content-lengthetagcontent-typelast-modified)?你知道吗

具体来说,我的代码如下所示:

client = Client()
bucket = client.get_bucket('my-bucket')
blob = bucket.blob('my-blob')
with open('some-file', 'w') as f:
  blob.download_to_file(f)

我想在下载blob时发送头(content-lengthetag,等等)。你知道吗

请注意:

  1. 使用blob.size(和朋友)需要调用blob.reload(),这会发出一个HTTP请求(下载blob后不会自动填充它们;请参阅注释)
  2. 使用requests.get(blob.generate_signed_url())(或类似的)意味着我不能利用Client的连接池

那么,在不发出任何额外的HTTP请求的情况下,有没有办法在使用google-cloud-storage库从云存储下载文件时获取头文件?你知道吗


Tags: clienthttpcloudgetbucket头文件mygoogle
2条回答

通过Python客户机或任何其他客户机都不可能在一个请求中同时检索对象数据和对象元数据。你知道吗

如果我们查看Google云存储(GCS)公开的API,就会发现检索对象内容的API记录在Objects-gt;Gethere下。这描述了对以下对象的调用:

GET https://storage.googleapis.com/storage/v1/b/bucket/o/object

如果我们查看此请求可用的参数,就会发现一个名为alt的参数,它有两个选项:

  • json(默认)
  • media

在文件末尾,还有进一步的评论:

By default, this responds with an object resource in the response body. If you provide the URL parameter alt=media, then it will respond with the object data in the response body.

仔细阅读这篇文章,似乎可以检索元数据内容。。。但不是两者都有。由于restapi是构建所有其他库所依据的底层API,如果没有底层restapi来在单个请求中检索内容和元数据,那么就没有更高级别的API来实现这一点。你知道吗

如前所述,Python库不允许同时设置头和主体。你知道吗

这是因为reloadfunctionapi_request获取响应对象。你知道吗

response = client._connection.api_request(
        method="GET", path=self.path, query_params=query_params)
self._set_properties(api_response)

但是,函数download_to_filedownload_to_filenamedownload_as_string使用另一个直接写入IO缓冲区的function_do_download。不返回响应对象。你知道吗

后面的函数使用您提到的Client池,但它没有设置为更新blob对象属性。你知道吗

相关问题 更多 >

    热门问题