Я пытаюсь загрузить большое видео в Google Cloud Storage через Google App Engine.
Я следовал принципам, изложенным в этом сообщении, которые относятся к загрузке большой электронной таблицы. Невозможно загрузить большие файлы в Python + Flask в GCP App Engine
Я настроил фрагменты с помощью dropzone. js
Я установил загрузите файл main.py, который, как я надеялся, загрузит фрагменты файлов в каталог tmp приложения и поместил logi c, который перемещает завершенный файл в Google Cloud Storage, когда все части будут на месте.
Я получаю следующее сообщение об ошибке:
TypeError: аргумент write () должен быть str, а не байтами
Вот мой внутренний код
from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage
from flask_dropzone import Dropzone
from werkzeug.utils import secure_filename
import os
import base64
app = Flask(__name__, template_folder='./templates', static_folder="./static")
dropzone = Dropzone(app)
app.config['UPLOAD_PATH'] = '/tmp'
@app.route('/', methods=['GET', 'POST'])
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST', 'GET'])
def upload():
if request.method == 'POST':
upload_file = request.files.get('file')
tmp_file_path = '/tmp/' + upload_file.filename
with open(tmp_file_path, 'a') as f:
f.write(uploaded_file.read())
chunk_index = int(flask.request.form.get('dzchunkindex')) if
(flask.request.form.get('dzchunkindex') is not None) else 0
chunk_count = int(flask.request.form.get('dztotalchunkcount')) if (flask.request.form.get('dztotalchunkcount') is not None) else 1
if (chunk_index == (chunk_count - 1)):
print('Saving file to storage')
print( chunk_count )
storage_client = storage.Client()
storage_bucket = storage_client.get_bucket('percy-277618.appspot.com')
blob = storage_bucket.blob(upload_file.filename)
blob.upload_from_filename(tmp_file_path, client=storage_client)
print('Saved to Storage')
print('Deleting temp file')
os.remove(tmp_file_path)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
Это мой код внешнего интерфейса.
Dropzone.options.uploadwidget = {
paramName: 'file',
forceChunking: true,
timeout: 300000,
chunking: true,
url: '/upload',
chunkSize: 10485760,
maxFilesize: 1025,
};