在 Google App Engine 的常规(非灵活)实例上,您可以使用 Blobstore API 并创建一个 URL 以允许用户将文件直接上传到您的 Blobstore。上传后,您的应用引擎应用程序会收到文件位置通知并可以对其进行处理。python代码的一个例子是:
from google.appengine.ext import blobstore
upload_url = blobstore.create_upload_url('/upload_photo')
请参阅Blobstore 文档。
切换到 Google App Engine 柔性环境后,Blobstore 的使用在很大程度上已被 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 下载文件,因为我认为您不能假设工作人员仍然可以访问存储在实例文件系统中的文件。因此,将文件上传到我的实例而不是直接到它的存储位置,我没有任何好处。