[英]Is there an equivalent to `refFromUrl` in google-cloud-storage for Python?
[英]Get download headers with google-cloud-storage Python client?
當我使用google-cloud-storage
Python 客戶端下載 Google Cloud Storage blob 時,如何獲取它的標頭(特別是content-length
、 etag
、 content-type
和last-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-length
、 etag
等)。
注意:
blob.size
(和朋友)需要調用blob.reload()
,這會發出一個 HTTP 請求(並且一旦 blob 被下載,它們就不會自動填充;見評論)requests.get(blob.generate_signed_url())
(或類似的)意味着我不能利用Client
的連接池那么,在不發出任何額外的 HTTP 請求的情況下,有沒有辦法在使用google-cloud-storage
庫從 Cloud Storage 下載文件時獲取標頭?
不可能通過 Python 客戶端或任何其他客戶端在一個請求中同時檢索對象數據和對象元數據。
如果我們查看 Google Cloud Storage (GCS) 公開的 API,我們會發現檢索對象內容的 API 記錄在 Objects -> Get here 下。 這描述了對以下內容的調用:
GET https://storage.googleapis.com/storage/v1/b/bucket/o/object
如果我們查看此請求可用的參數,我們會發現一個名為alt
的參數,它有兩個選項:
json
(默認)media
在文檔的末尾,有進一步的評論:
默認情況下,這會在響應正文中使用對象資源進行響應。 如果您提供 URL 參數
alt=media
,則它將使用響應正文中的對象數據進行響應。
仔細閱讀這一點,似乎可以檢索或者元數據或內容...但不能同時使用。 由於 REST API 是構建所有其他庫所依據的底層 API,如果沒有底層 REST API 來檢索單個請求中的內容和元數據,那么將沒有更高級別的 API 來實現這一點。
如前所述,Python 庫不允許同時設置標題和正文。
這是因為reload
函數從api_request
獲取響應對象。
response = client._connection.api_request(
method="GET", path=self.path, query_params=query_params)
self._set_properties(api_response)
但是,函數download_to_file
、 download_to_filename
和download_as_string
使用另一個直接寫入 IO 緩沖區的函數_do_download
。 並且不返回響應對象。
此后一個函數使用您提到的Client
池,但未提供更新 blob 對象屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.