如何从不具有BlobStore的Flask表单直接将视频文件上传到Cloud Storage?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从不具有BlobStore的Flask表单直接将视频文件上传到Cloud Storage?相关的知识,希望对你有一定的参考价值。

我正在使用Flask,并且我的Web应用程序的索引页上有一个表单,该表单要求用户上传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,但我不确定如何做到这一点。

下面是一个片段,显示了我当前如何通过表单将用户上传的视频存储到Cloud Storage中。不幸的是,由于收到错误消息,我仍然无法上传大文件。再说一遍,我的问题是:如何使我的用户以不会让服务器超时或给我Request Too Large错误的方式将其文件直接上传到Cloud Storage?

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())
答案

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

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

示例代码included here

以上是关于如何从不具有BlobStore的Flask表单直接将视频文件上传到Cloud Storage?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实验性 API 将大文件写入 Blobstore?

使用 Flask (python) 从 GAE 数据存储中提供图像

上传到 Blobstore 会产生 Java 堆 OutOfMemoryError

如何在 BlobStore 中设置文件名属性?

Xamarin 表单 - 从不正确的线程访问的领域

如何在 Flask 中获取已提交表单的名称?