2

我的应用程序将一堆图像存储为 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 Cloud Storage?换句话说,我能否使用 GCS 客户端库和现有的 blob 密钥访问现有的 blob?或者,我是否必须将 blob 复制到 GCS 并获取新的 blob 密钥?
  2. 假设我必须将它们复制到 GCS,最简单的方法是什么?有迁移工具之类的吗?如果做不到这一点,是否有一些我可以复制粘贴的示例代码?

谢谢!

4

4 回答 4

3

这些文件已经进入 GCS 有一段时间了。blobstore 只是访问它的另一种方式。Blob 键和访问权限不应受到影响。

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

于 2015-05-24T01:11:04.063 回答
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
于 2015-05-24T01:15:40.973 回答
0

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

文件 API 的删除将以下列方式进行。

2015 年 5 月 20 日,新应用程序将无法访问 Files API。在 2015 年 5 月 20 日之前创建的应用程序将继续运行而不会出现任何问题。也就是说,我们强烈鼓励开发人员立即开始切换到 Cloud Storage 客户端库。

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

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

由于我使用完全相同的代码来编写 blobstore 文件,因此我花了一天时间研究 GCS 系统。在未能让“服务帐户”工作(通过经历记录不充分的 OAuth2 混淆)后,我放弃了使用 GCS。

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

于 2015-05-26T17:51:07.687 回答
0

我在本地运行 GAE 服务器时也遇到了同样的问题:

com.google.appengine.tools.cloudstorage.NonRetriableException:com.google.apphosting.api.ApiProxy$FeatureNotEnabledException:文件 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 日被拒绝。(来源

从这个MVN Repo最新的一个是 'com.google.appengine.tools:appengine-gcs-client:0.5'

于 2016-04-01T17:32:50.673 回答