如何从文件API到谷歌云存储迁移?(How to migrate from The Files AP

2019-10-23 04:00发布

我有一个消息,昨天从谷歌说,文件API将在7月28日被禁用,建议迁移到谷歌云存储。

目前我使用的文件API通过以下方式 - 在收到电子邮件后,我保存它的附件(仅适用于图像)来BLOBSTORE -

from google.appengine.api import files

bs_file = files.blobstore.create(mime_type=ctype, _blobinfo_uploaded_filename='screenshot_'+image_file_name)
try:
    with files.open(bs_file, 'a') as f:
        f.write(image_file)
    files.finalize(bs_file)
    blob_key = files.blobstore.get_blob_key(bs_file)

后来,我访问Blob存储和附加同一图像到另一个邮件我发:

attachments = []
for at_blob_key in message.attachments:
    blob_reader = blobstore.BlobReader(at_blob_key)
    blob_info = blobstore.BlobInfo.get(at_blob_key)
    if blob_reader and blob_info:
        filename = blob_info.filename
        attachments.append((filename, blob_reader.read()))
if len(attachments) > 0:
    email.attachments = attachments
email.send()

现在,我应该使用谷歌云存储,而不是Blob存储区。 谷歌云存储不是免费的,所以我必须启用计费。 目前我Blob存储区存储的数据0.27Gb,这是小,所以看起来像我将不必付出很多。 但恐怕要启用结算,因为我的代码的其他一些地方可能会导致巨额账单(似乎是没有办法只启用了谷歌云存储计费)。

那么,有没有什么办法可以继续在我的案件的文件存储Blob存储区的使用情况如何? 我可以用别的什么免费的,而不是谷歌云存储(什么是关于谷歌驱动器)?

Answer 1:

下面的示例使用默认GCS斗来存储您的截图。 默认的桶有免费配额。

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

default_bucket = app_identity.get_default_gcs_bucket_name()
image_file_name = datetime.datetime.utcnow().strftime('%Y%m%d%H%M%S') + '_' + image_file_name # GCS filename should be unique
gcs_filename = '/%s/screenshot_%s' % (default_bucket, image_file_name)
with gcs.open(gcs_filename, 'w', content_type=ctype) as f:
    f.write(image_file)

blob_key = blobstore.create_gs_key('/gs' + gcs_filename)
blob_key = blobstore.BlobKey(blob_key) # if should be stored in NDB


文章来源: How to migrate from The Files API to Google Cloud Storage?