Python 如何使GCP函数生成的图像在GC存储中被识别为有效?

Python 如何使GCP函数生成的图像在GC存储中被识别为有效?,python,firebase,google-cloud-functions,google-cloud-storage,python-imaging-library,Python,Firebase,Google Cloud Functions,Google Cloud Storage,Python Imaging Library,我正在尝试使用python创建一个图像缩略图创建函数,运行在google云平台的函数中。图像作为base64字符串发送到cloud函数,并通过Python的包进行处理和缩小。然后将其作为图像上传,从枕头图像对象上传到BytesIO对象,然后保存到谷歌云存储。这一切都成功地完成了 这里的问题非常奇怪:谷歌云存储在手动创建访问令牌之前无法识别图像。否则,图像将处于无限循环中,永远无法加载,也永远无法使用 我已经回顾过,它与我的问题非常相似(这里的图片正好显示了我的问题:上传的文件无法正确加载),但它

我正在尝试使用python创建一个图像缩略图创建函数,运行在google云平台的函数中。图像作为base64字符串发送到cloud函数,并通过Python的包进行处理和缩小。然后将其作为图像上传,从枕头图像对象上传到BytesIO对象,然后保存到谷歌云存储。这一切都成功地完成了

这里的问题非常奇怪:谷歌云存储在手动创建访问令牌之前无法识别图像。否则,图像将处于无限循环中,永远无法加载,也永远无法使用

我已经回顾过,它与我的问题非常相似(这里的图片正好显示了我的问题:上传的文件无法正确加载),但它在两个重要类别上有所不同:1)它们直接操作图像数组,而我的代码从未触及它;2)它们在Node.js中工作,其中Firebase SDK与Python中的不同

生成图像的代码如下所示:

def thumbnailCreator(request):
    # Setting up the resourcse we are going to use
    storage_client = storage.Client()
    stor_bucket = storage_client.bucket(BUCKET_LINK)

    # Retriving the Data
    sent_data = request.get_json()['data']
    name = sent_data['name']
    userID = sent_data['userID']

    # Process to go between base64 string to bytes, to a file object 
    imageString = stor_bucket.blob(PATH_TO_FULL_SIZE_IMAGE).download_as_string()
    
    imageFile = BytesIO(imageString)
    image = Image.open(imageFile)

    # Resizing the image is the goal 
    image = image.resize(THUMBNAIL_SIZE)

    # Go between pillow Image object to a file
    imageFile = BytesIO()
    image.save(imageFile, format='PNG')
    imageBytes = imageFile.getvalue()
    image64 = base64.b64encode(imageBytes)
    imageFile.seek(0)


    # Uploading the Data 
    other_blob = stor_bucket.blob(PATH_FOR_THUMBNAIL_IMAGE)
    other_blob.upload_from_file(imageFile, content_type = 'image/png')

    return {'data': {'response': 'ok', 'status': 200}}

同样,这是有效的。我感觉MIME类型有点问题。对于这种类型的编程/网络/图像处理,我是个新手,所以我一直在寻找更好的方法。无论如何,感谢您的帮助。

这个问题的前提似乎不准确,即必须手动创建访问令牌才能使图像正常工作。经过进一步测试,错误来自于我工作的代码库的其他部分。上面的python脚本确实适用于图像处理。可以通过代码生成图像的访问令牌,并在客户端提供


如果将来有人需要在Google Cloud平台上使用Pillow/PIL时偶然发现它,请保留此选项。

您似乎没有使用
image64
变量,您可能想删除它,因为它可能需要从您的CloudFunction获取资源。您是否已将文件下载到您的计算机并检查了其中的内容?您也正在将图像作为字符串加载,使用
download\u as\u bytes
似乎是正确的。我已删除image64变量。机器上的图像按预期工作。我已尝试将_作为_bytes()下载,但这样做会使下载的映像无法在计算机上运行。然而,我似乎错了,这里有一个错误。在创建访问令牌之前不会加载该文件,但它似乎不会在客户端导致错误。也就是说,访问令牌不必手动生成,它可以通过编程生成,并且仍然生成有效的png。谢谢你看这个,你通过捕捉IMAGE64废料做了帮助。谢谢你发布解决方案,考虑把它标记为正确的!