Python / GCP完整性检查:这是在POST调用中引用存储在GCP存储中的图像的正确方法

问题描述 投票:0回答:1

场景:存储在GCP存储桶中的图像文件需要通过POST发送到第三方REST端点]

问题:

这真的是最好的模式吗?有没有更有效,更详细的方法?

我们有图像通过移动应用上传到GCP存储桶。当图片上传的finalize事件触发时,我们有一个GCP Cloud Function(Python 3),它通过获取对上传图片的引用对此作出反应,将其下载到临时文件,然后将该临时文件用作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将不起作用。

场景:存储在GCP存储桶中的图像文件需要通过POST发送到第三方REST端点。问题:这真的是最好的模式吗?有没有更有效,更详细的方法?我们...

python post google-cloud-platform google-cloud-storage
1个回答
0
投票

[如果您能够将URL发送给第三方端点,而不是实际的图像内容,则可以使用签名URL给图像提供时间限制,而无需提供对存储桶的第三者访问权限或公用桶。

© www.soinside.com 2019 - 2024. All rights reserved.