Загрузка большого видеофайла в Google App Engine - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь загрузить большое видео в 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,

};


1 Ответ

1 голос
/ 05 августа 2020

Использование uploaded_file.read() дает байты, а не строку. Вы должны открыть файл в двоичном режиме :

with open(tmp_file_path, 'ab') as f:
...