我正在开发一个小型应用程序,该应用程序将从用户处获取非常大的文件并将其上传到 Blobstore,然后对其进行处理并将其移动到 Google Cloud Storage。
我使用 Python 来实现此目的,我的代码如下。使用Python2.7标准环境
当用户添加小文件时,他们可以正常上传数据,整个工作流程也很顺利,但是当他们加载大小超过 1 或 2 GB 的文件时,他们会收到以下错误
错误请求错误
上传网址已过期。
该应用程序是一个网络应用程序,可加载表单以供他们上传文件。用户将看到该表单,单击浏览按钮加载文件,然后单击提交按钮启动上传
import os
import urllib
import webapp2
import cgi
import argparse
import datetime
import pprint
import re
import webapp2
import requests
import cloudstorage
import logging
from flask import Flask, request
from google.appengine.api import app_identity
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.api import users
from google.appengine.api import app_identity
class MainHandler(webapp2.RequestHandler):
def get(self):
gs_bucket_name = 'BUCKET_NAME'
upload_url = blobstore.create_upload_url('/upload',gs_bucket_name=gs_bucket_name)
self.response.write('<html>\n<body>\n')
self.response.write('<form action="%s" method="POST" enctype="multipart/form-data">\n'% upload_url)
self.response.write('<input type="file" name="file" accept=".mp4"><br>\n')
self.response.write('<input type="submit" name="submit" value="Submit"></form>\n')
self.response.write('</body>\n</html>\n\n')
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
# 'file' is file upload field in the form
upload_files = self.get_uploads('file')
file_infos = self.get_file_infos()
blob_info = upload_files[0]
file_info = file_infos[0]
glob_gs_object_name=file_info.gs_object_name[3:]
glob_filename=upload_files[0].filename
cloudstorage.copy2(file_info.gs_object_name[3:], '/BUCKET_NAME/'+upload_files[0].filename, metadata=None, retry_params=None)
try:
cloudstorage.delete(file_info.gs_object_name[3:])
except cloudstorage.NotFoundError:
pass
self.response.write(complete_upload)
app = webapp2.WSGIApplication([('/', MainHandler),('/upload', UploadHandler)],debug=True)
所以我正在寻找的是正常上传大文件并且不会出现此错误...
最佳答案
uploadUrl 在大约 10 分钟后过期,我看到 work around使用 jQuery 提交表单时创建 URL。
也可以选择直接上传到云存储,并且有一个存储 client library可用,但仅在 Python 3 运行时受支持。
关于python - 在 App Engine 上使用 Python 上传大文件时如何防止 Blob 存储上传 URL 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56542858/