【问题标题】:How to upload a video file directly to Cloud Storage from a Flask form without BlobStore?如何在没有 BlobStore 的情况下从 Flask 表单将视频文件直接上传到 Cloud Storage?
【发布时间】:2020-05-28 20:55:36
【问题描述】:

我正在使用 Flask,并且我的网络应用程序的索引页面上有一个表单,要求用户上传 MP4 视频。我希望我的用户上传 30 分钟长的视频,因此视频大小可能会达到数百兆字节。现在的问题是我打算将此 Flask 应用程序部署到 Google App Engine,显然我无法使用任何超过 32MB 的静态文件。不知何故,当我尝试在已部署版本中上传任何大于 32MB 的视频时,我收到 Request Too Large 错误。

我发现 BlobStore Python API 过去曾是推荐的解决方案,用于在服务器上处理非常大的文件。但那是针对 Python 2.7:https://cloud.google.com/appengine/docs/standard/python/blobstore/

我使用的是 Python 3.7,Google 现在建议将文件直接上传到 Cloud Storage,但我不知道该怎么做。

下面是一个 sn-p,显示了我当前如何通过表单将用户上传的视频存储到 Cloud Storage 中。不幸的是,由于收到错误消息,我仍然无法上传大文件。再说一次,我的问题是:如何让我的用户以不会让服务器超时或给我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())

【问题讨论】:

    标签: python google-app-engine flask google-cloud-storage flask-wtforms


    【解决方案1】:

    由于request limitation,您无法使用 Google App Engine 将超过 32MB 的文件上传到 Cloud Storage。但是,您可以通过在 python 案例中使用可恢复上传来上传到 Cloud Storage 来绕过它,使用 "google-resumable-media"

    • 资源的大小未知(即它是在 飞)
    • 请求必须是短暂的
    • 客户端有请求大小限制
    • 资源太大而无法放入内存

    示例代码included here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2018-12-24
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多