Загрузка большого файла в Flask

Я пытаюсь реализовать приложение колбу для загрузки файлов. Этот файл может быть очень большим. Например, почти 2G по размеру.

Я закончил функцию процесса на стороне сервера следующим образом:

@app.route("/upload/<filename>", methods=["POST", "PUT"])
def upload_process(filename):
    filename = secure_filename(filename)
    fileFullPath = os.path.join(application.config['UPLOAD_FOLDER'], filename)
    with open(fileFullPath, "wb") as f:
        chunk_size = 4096
        while True:
            chunk = flask.request.stream.read(chunk_size)
            if len(chunk) == 0:
                return

            f.write(chunk)
    return jsonify({'filename': filename})

Что касается браузера, я должен дать пользователям возможность отправить файл. Один файл за раз. Показать индикатор выполнения, чтобы указать процесс загрузки. Но я понятия не имею о коде на стороне браузера. Как я могу использовать код JavaScript, чтобы начать загрузку и показать ее статус?

 Maksim Kniazev16 мар. 2018 г., 04:20
if len (chunk) == 0: возврат; как ты ничего не возвращаешь? !!

Ответы на вопрос(1)

Это будет трудной задачей для вас, чтобы выяснить самостоятельно. Я хотел бы предложить плагин, какhttps://blueimp.github.io/jQuery-File-Upload/

Из исходного кода этих проектов видно, что они используют имя метода, которое, по сути, определяет, насколько велик файл и сколько данных было передано к настоящему моменту, и сколько еще осталось, чтобы показать процентное соотношение полного деления.

пример кода из этого проекта

progressall: function (e, data) {
                var $this = $(this);
                $this.find('.fileupload-progress')
                    .find('.progress').progressbar(
                        'option',
                        'value',
                        parseInt(data.loaded / data.total * 100, 10)
                    ).end()
                    .find('.progress-extended').each(function () {
                        $(this).html(
                            ($this.data('blueimp-fileupload') ||
                                    $this.data('fileupload'))
                                ._renderExtendedProgress(data)
                        );
                    });
            }

https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload-jquery-ui.js

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

 Terry.Su28 июн. 2016 г., 05:00
Спасибо за вашу помощь. jQuery-File-Upload - хорошая помощь для моего приложения. Если вы не возражаете, пожалуйста, скажите мне, поддерживает ли jQuery-File-Upload операцию потоковой отправки / размещения для загрузки всего файла вместо разделения его на мелкие части, и как это настроить.

Ваш ответ на вопрос