場景:存儲在 GCP 存儲桶中的圖像文件需要通過 POST 發送到第三方 REST 端點問題:這真的是最好的模式嗎?有沒有更有效、更簡潔的方法?我們有通過移動應用上傳到 GCP 存儲桶的圖像。當圖像上傳的 finalize 事件觸發時,我們有一個 GCP 云函數 (Python 3),它通過獲取上傳圖像的 ref 來對此做出反應,將其下載到臨時文件,然后使用該臨時文件作為 POST 的圖像源. open這是我們當前的代碼,它可以工作,但在我看來,這似乎與多個命令令人費解。更具體地說:有沒有更好的方法來簡單地從 GCP 存儲中獲取圖像 blob 并將其附加到 POST 調用,而無需先將其保存為本地文件然后打開它以便將其附加到 POST?def third_party_upload(data, context): # get image from bucket storage_client = storage.Client() bucket = storage_client.bucket(data['bucket']) image_blob = bucket.get_blob(data['name']) download_path = '/tmp/{}.jpg'.format(str(uuid.uuid4())) #temp image file download location # save GCP Storage blob as a temp file with open(download_path, 'wb') as file_obj: image_blob.download_to_file(file_obj) # open temp file and send to 3rd-party via rest post call with open(download_path, 'rb') as img: files = {'image': (data['name'], img, 'multipart/form-data', {'Expires': '0'}) } headers = { 'X-Auth-Token': api_key, 'Content-Type': 'image/jpg', 'Accept': 'application/json' } # make POST call response = requests.post(third_party_endpoint, headers=headers, files=files) print('POST response:', response)更新:一些評論者提到簽名 URL 是一種可能性,我同意它們是一個很好的選擇。但是,我們堅持要求將圖像二進制文件包含為 POST 正文。在這種情況下,簽名 URL 將不起作用。
2 回答

紅糖糍粑
TA貢獻1815條經驗 獲得超6個贊
HTTP 方法 POST 需要數據。您必須在 HTTP 請求中提供該數據。除了讀取之外,沒有什么神奇的方法可以獲取 Cloud Storage 數據。該過程是從 Cloud Storage 讀取數據,然后將該數據提供給 POST 請求。

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
如果您能夠將 URL 發送到第三方端點而不是實際的圖像內容,則可以使用簽名 URL 提供對圖像的限時訪問,而無需提供對存儲桶的第三方訪問權限或制作存儲桶上市。
更多信息在這里:https ://cloud.google.com/storage/docs/access-control/signed-urls
添加回答
舉報
0/150
提交
取消