为存储在谷歌云存储中的图像存储Blob密钥的详细信息



我正试图将一个应用程序从谷歌应用程序引擎标准环境第一代(python 2.7运行时(迁移到第二代(python 3运行时(。

该应用程序为存储在谷歌云存储(以前的blob存储(中的用户特定图像提供服务。我已经完成了谷歌提供的迁移指南中提到的大部分迁移。

我面临以下挑战:

  1. 我找不到任何为存储在谷歌云存储中的Blob创建blob key的特定方法。在上一代中,我可以使用create_gs_key,但该功能似乎已被删除
  2. 旧的应用程序以ndb.BlobKeyProperty()的形式存储了图像详细信息,我如何将这些信息迁移到云存储并保留信息。对于上一代,我可以使用GoogleAppEngineCloudStorageClient

当前堆栈:

  • 谷歌应用程序引擎:python 3运行时,flask HTML,jquery,javascript

旧堆栈:

  • 谷歌应用引擎:python 2.7运行时,webapp2,HTML,jquery,javascript

免责声明:

  • Google通过在app.yaml中启用appengine apis,确实提供了在python 3运行时使用应用程序引擎API的选项,但似乎该功能随时都可能被删除
  • 我不想使用docker将应用程序永久保存在python 2.7上
  • 除了images API,我没有使用任何其他遗留的谷歌应用程序引擎服务

我可能错过了什么,所以请随时更正。

编辑1:

  1. 如前所述,我有一个旧的应用程序,它的blob_key指示存储图像的blob密钥,如果在当前版本中我必须直接使用file name,我将不得不将以blob密钥形式存储的图像迁移到谷歌云存储,或者对模型进行更改(我正在努力避免这种情况,除非我没有任何其他选择(

  2. 如果我理解正确,google.appengine.api.blobstore.blobstore将被弃用,并且不鼓励使用blob store方法(如果我错了,请纠正我(。

我也遇到过几乎相同的问题:我的GAE应用程序是用python2.7和API编写的,这一点不推荐使用。我所做的是用python3和Flask创建了一个全新的应用程序,并为其提供了公共api端点api.{{my domain}}.com。当收到对物品图像的请求时,我会调用我的应用程序的旧版本python2.7,并将其写回新版本。它并不优雅,但它是我能做的最好的。

item = get_item(item_id)    
q = Image.query()
data = q.filter(Image.reference == item.key)
data = data.fetch(5)
for i in data:  
# get the image from legacy and write it to new
x_list = reqs.get(f"https://legacy.myapp.com/imgs/{item_id}").content
l_json = json.loads(x_list)
item.images = []
for img_url in l_json.get("imgs"):
img_data = reqs.get(img_url).content
identity = str(uuid.uuid4())
try:
io_img_data = io.BytesIO(img_data)
upload_blob("mynew_app.appspot.com", io_img_data, identity)

最新更新