如何在没有 BlobStore 的情况下从 Flask 表单将视频文件直接上传到云存储?



我正在使用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,谷歌现在建议将文件直接上传到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())

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

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

此处包含的示例代码。

最新更新