Dropzone не отвечает при длительном прослушивании ответа от Flask - PullRequest
0 голосов
/ 13 октября 2019

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

Короче говоря, чем дольше сервер отвечает, тем меньше вероятность, что клиент отреагирует на ответ;загрузка файла, отправленного с ответом, не происходит.

Мой клиент, включая dropzone

<p> Drop your csv file including the addresses here </p>
{{ dropzone.create('/upload') }}
<button id="upload">Upload</button>
{{ dropzone.load_js() }}
{{ dropzone.config(custom_init="this.on('success', function(info,response)
    {
    var csvfile = JSON.parse(response)['file'];
    console.log(csvfile);
    console.log('Successfully downloaded file!')
    const blob = new Blob([csvfile], {type:'text/csv'});
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.setAttribute('hidden','');
    a.setAttribute('href', url);
    a.setAttribute('download', 'predictions.csv');
    document.body.appendChild(a)
    a.click();
    document.body.removeChild(a);})") }}

Мой маршрут, обрабатывающий загруженный файл

@app.route('/upload', methods=['GET', 'POST'])
@login_required
def upload():
    if current_user.is_subscribed:
        model = load_model()
        if request.method == 'POST':
            for key, file in request.files.items():
                if key.startswith('file'):
                    csvfile = update_csv(model=model, file=list(reader(codecs.iterdecode(file, 'utf-8-sig'), delimiter=";")))
                    #---------- Get updated csv file with predictions
                    response = json.dumps({'file': csvfile})
                    print("Sending response:")
                    return response

        return render_template('upload.html', response=response)
    return redirect(url_for("index"))

ЕстьЕсть ли обходные пути к этому?

...