Как загрузить видеофайл непосредственно в облачное хранилище из формы Flask без BlobStore? - PullRequest
0 голосов
/ 13 февраля 2020

Я использую Flask, и на индексной странице моего веб-приложения есть форма, которая требует, чтобы пользователи загружали видео MP4. Я ожидаю, что мои пользователи будут загружать видео продолжительностью 30 минут, поэтому размеры видео, вероятно, составят сотни мегабайт. Проблема в том, что я собираюсь развернуть это приложение Flask в Google App Engine, и, очевидно, я не могу работать с любым файлом stati c выше 32 МБ. Почему-то, когда я пытаюсь загрузить любое видео в развернутой версии размером более 32 МБ, я получаю ошибку Request Too Large.

Я вижу, что API BlobStore Python раньше рекомендовалось для работы с действительно большие файлы на сервере в прошлом. Но это было для Python 2.7: https://cloud.google.com/appengine/docs/standard/python/blobstore/

Я использую Python 3.7, и Google теперь рекомендует загружать файлы непосредственно в облачное хранилище, а я нет точно знаю, как это сделать.

Ниже приведен фрагмент, показывающий, как в настоящее время я храню загруженные видео моих пользователей через форму в облачном хранилище. К сожалению, я все еще ограничен в загрузке больших файлов, потому что я получаю сообщения об ошибках. Итак, еще раз, мой вопрос: как я могу заставить своих пользователей выгружать свои файлы напрямую в облачное хранилище таким образом, чтобы не допустить тайм-аут сервера или не выдать ошибку Request Too Large?

form = SessionForm()
    blob_url = ""
    if form.validate_on_submit():

        f = form.video.data
        video_string = f.read()
        filename = secure_filename(f.filename)

        try:
            # The custom function upload_session_video() uploads the file to a Cloud Storage bucket
            # It uses the Storage API's upload_from_string() method.
            blob_url = upload_session_video(video_string, filename)

        except FileNotFoundError as error:
            flash(error, 'alert')

        # Create the Cloud Storage bucket (same name as the video file)
        user_bucket = create_bucket(form.patient_name.data.lower())

1 Ответ

0 голосов
/ 13 февраля 2020

Вы не можете загружать файлы размером более 32 МБ в облачное хранилище с помощью Google App Engine из-за ограничения запроса . Однако вы можете обойти это, загрузив в облачное хранилище с помощью возобновляемых загрузок в python случае, используя "google-resumable-media" .

  • размер ресурса составляет неизвестно (т. е. оно генерируется на лету)
  • запросы должны быть кратковременными
  • клиент имеет ограничения по размеру запроса
  • ресурс слишком велик для размещения в памяти

пример кода включен сюда .

...