На обычном (негибком) экземпляре Google App Engine вы можете использовать API Blobstore и создать URL-адрес, чтобы позволить пользователю загружать файл непосредственно в ваш Blobstore. Когда он загружается, ваше приложение-приложение приложения уведомляется о местонахождении файла и может его обработать. Пример кода python:Google Cloud Storage create_upload_url - App Engine Flexible Python
from google.appengine.ext import blobstore
upload_url = blobstore.create_upload_url('/upload_photo')
См. the Blobstore docs.
Переход на гибкую среду Google App Engine, usage of the Blobstore has been largely replaced by Cloud Storage. В таком случае существует ли эквивалент create_upload_url
?
В моей текущей реализации выполняется стандартная загрузка файла в приложение для флагов python. Затем происходит что-то вроде:
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 Вы нашли ответ для этого? –