Как предотвратить прекращение загрузки URL-адреса Blobstore при загрузке больших файлов с помощью Python в App Engine - PullRequest
1 голос
/ 11 июня 2019

Я работаю над небольшим приложением, которое будет принимать очень большие файлы от пользователя и загружать их в Blobstore, а затем обрабатывать и перемещать в Google Cloud Storage.

Я использую Python для этого, и мой код ниже. Использование стандартной среды с Python2.7

Когда пользователи добавляют небольшие файлы, они обычно могут загружать данные, и весь рабочий процесс проходит гладко, однако, когда они загружают файлы размером более 1 или 2 ГБ, они получают ошибку ниже

Ошибка неверного запроса

Срок действия URL для загрузки истек.

Приложение представляет собой веб-приложение, которое загружает форму для загрузки своих файлов. Пользователи увидят форму, нажмите кнопку обзора, чтобы загрузить свой файл, а затем нажмите кнопку отправки, чтобы начать загрузку

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)

Так что я искал, чтобы нормально загружать большие файлы и не получать эту ошибку ...

1 Ответ

1 голос
/ 11 июня 2019

Срок действия uploadUrl истекает примерно через 10 минут, и я видел, что обходит вокруг создание URL-адреса при отправке формы с использованием jQuery.

Загрузка непосредственно в облачное хранилище такжеопция и есть доступная клиентская библиотека Storage , но она поддерживается только во время выполнения Python 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...