【发布时间】:2019-10-25 19:49:44
【问题描述】:
我正在开发一个小应用程序,它会从用户那里获取非常大的文件并将它们上传到 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)
所以我一直在寻找的是让大文件正常上传并且没有出现这个错误......
【问题讨论】:
标签: python google-app-engine google-cloud-platform blobstore