在Google App Engine的常規(非靈活)實例上,您可以使用Blobstore API並創建一個URL以允許用戶將文件直接上傳到Blobstore中。上傳時,應用程序引擎應用程序會收到文件位置的通知,並可以對其進行處理。 python代碼的一個示例是:Google Cloud Storage create_upload_url - App Engine靈活的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費用。有沒有更好的辦法?
我有工作人員,後來處理上傳的文件,但我傾向於從他們的代碼中再次下載文件從雲存儲,因爲我不認爲你可以假設工作人員仍然可以訪問存儲在實例文件系統。因此,我沒有將文件上傳到我的實例而不是直接指向它的存儲位置。
幾天前我回答了一個類似的問題https://stackoverflow.com/questions/42002013/replacing-blobstore-upload-handler-with-gcs/42002289#42002289它可以幫助你。您可以使用創建上傳處理程序的相同方法。 – Aaron
謝謝@Samson,但我不認爲'google.appengine.ext.blobstore'包在App Engine靈活環境中可用。也許我錯了? –
@JonG你找到了答案嗎? –