从App Engine文件API

时间:2015-05-23 21:14:08

标签: google-app-engine google-app-engine-python

我的应用程序将一堆图像存储为blob。这大致是我存储图像的方式。

from google.appengine.api import files
# ...
fname = files.blobstore.create(mime_type='image/jpeg')
with files.open(fname, 'a') as f:
  f.write(image_byte)
files.finalize(fname)
blob_key = files.blobstore.get_blob_key(fname)

要投放这些图片,请使用images.get_serving_url(blob_key)

以下是我的问题:

  1. 我是否必须将所有blob复制到Google云端存储?换句话说,我是否可以使用GCS客户端库和现有的blob键访问现有blob?或者,我是否必须将blob复制到GCS并获取新的blob键?
  2. 假设我必须将它们复制到GCS,最简单的方法是什么?有迁移工具吗?如果不这样,是否有一些我可以复制粘贴的示例代码?
  3. 谢谢!

4 个答案:

答案 0 :(得分:3)

这些文件已经进入GCS一段时间了。 blobstore只是一种访问它的替代方法。 blob密钥和访问不应受到影响。

但是,您需要停止使用文件API本身并开始使用GCS API来创建文件。

答案 1 :(得分:2)

1)不,你仍然可以使用blobstore。您还可以在使用BlobstoreUploadHandler时将文件上载到blobstore。

2)使用blobstore时迁移很容易,因为您可以为GCS对象创建一个blobkey。当您使用默认GCS存储桶时,您可以获得免费配额。

from google.appengine.api import app_identity
import cloudstorage as gcs

default_bucket = app_identity.get_default_gcs_bucket_name() 
gcs_filename = '/%s/%s' % (default_bucket, image_file_name)
with gcs.open(gcs_filename, 'w', content_type='image/jpeg') as f:
    f.write(image_byte)

blob_key = blobstore.create_gs_key('/gs' + gcs_filename)
# and create a serving url

答案 2 :(得分:0)

我于2015年5月19日收到了来自Google Cloud Platform的电子邮件,此处的摘录如下:

  

删除Files API将按以下方式进行。

     

2015年5月20日,没有新的应用程序可以访问文件   API。在2015年5月20日之前创建的应用程序将   继续运行没有任何问题。也就是说,我们强烈鼓励   开发人员开始切换到云存储客户端库   今天。

     

2015年7月28日太平洋时间下午12点开始,Files API将会发布   暂时关闭24小时。

     

2015年8月4日,我们将永久关闭Files API   太平洋时间中午12点。

由于我使用完全相同的代码来编写blobstore文件,因此我花了一天时间研究GCS系统。未能获得"服务帐户"为了工作(通过记录糟糕的OAuth2混淆),我放弃了使用GCS。

现在我正在使用ndb的BlobProperty。我使用父键和键名(作为文件名)将blob保存在单独的模型中以定位图像。使用一个单独的模型可以保留我常规实体中的巨大斑点,因此它们的大小不会减慢。我为图像编写了一个单独的REST API。

答案 3 :(得分:0)

我在本地运行GAE服务器时也面临同样的问题:

  

com.google.appengine.tools.cloudstorage.NonRetriableException:com.google.apphosting.api.ApiProxy $ FeatureNotEnabledException:已禁用Files API。更多信息:https://cloud.google.com/appengine/docs/deprecations/files_api

在我的情况下,这解决了我的问题:

我简单地改变了

此:

  

编译com.google.appengine.tools:appengine-gcs-client:0.4.1'

要:

  

编译com.google.appengine.tools:appengine-gcs-client:0.5'

build.gradle文件中,因为Files API(Beta)已于2013年6月12日撤销,并于2015年9月9日被Turndowned所取消。(Source

来自MVN Repo最新版本的com.google.appengine.tools:appengine-gcs-client:0.5'