我的应用程序将一堆图像存储为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)
。
以下是我的问题:
谢谢!
答案 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'