【发布时间】:2017-02-07 10:10:43
【问题描述】:
在 Google App Engine 的常规(非灵活)实例上,您可以使用 Blobstore API 并创建一个 URL 以允许用户将文件直接上传到您的 Blobstore。上传后,您的应用引擎应用程序会收到文件位置通知并可以对其进行处理。 python代码的一个例子是:
from google.appengine.ext import blobstore
upload_url = blobstore.create_upload_url('/upload_photo')
切换到 Google App Engine 柔性环境,usage of the Blobstore has been largely replaced by Cloud Storage。在这种情况下,是否有 create_upload_url 的等价物?
我当前的实现将标准文件上传到 python Flask 应用程序。然后继续进行如下操作:
from flask import request
from google.cloud import storage
uploaded_file = request.files.get('file')
gcs = storage.Client()
bucket = gcs.get_bucket(bucket_name)
blob = bucket.blob(blob_name)
blob.upload_from_string(
uploaded_file.read(),
content_type=uploaded_file.content_type
)
与create_upload_url 相比,这似乎使网络负载增加了一倍,因为文件正在进入我的应用引擎实例,然后立即被复制出来。因此,在发生这种情况时,上传者将不得不等待额外的时间。据推测,我还将为此支付额外的 App Engine 费用。有没有更好的办法?
我有工作人员稍后处理上传的文件,但我倾向于在他们的代码中再次从 Cloud Storage 下载文件,因为我认为您不能假设工作人员仍然可以访问存储在实例中的文件文件系统。因此,将文件上传到我的实例而不是直接到它的存储位置并没有任何好处。
【问题讨论】:
-
几天前我回答了一个类似的问题stackoverflow.com/questions/42002013/…,这可能会对您有所帮助。您可以使用创建上传处理程序的相同方法。
-
感谢@Samson,但我认为
google.appengine.ext.blobstore包在 App Engine 柔性环境中不可用。也许我错了? -
@JonG 你找到答案了吗?
-
在@AneesHameed 下方添加了我的答案。
标签: python google-app-engine google-cloud-storage app-engine-flexible