2016-08-16 2 views
0

Требование: Загрузить файлы с использованием фляжной рамки. После загрузки на сервер пользователь должен иметь возможность видеть файл в пользовательском интерфейсе.Лучший способ загрузки больших файлов csv с использованием флэша python

Текущий код: Для удовлетворения вышеуказанного требования я написал код для загрузки достаточно больших файлов и его работы с файлом (~ 30 МБ, да, конечно, не так быстро). Но когда я пытаюсь загрузить файл (~ 100 МБ), он занимает слишком много времени, и процесс никогда не завершается.

Это то, что в настоящее время я делаю:

UPLOAD_FOLDER = «/ TMP»

file = request.files['filename'] 
    description = request.form['desc'] 

    filename = secure_filename(file.filename) 
    try: 
     file.save(os.path.join(UPLOAD_FOLDER, filename)) 
     filepath = os.path.join(UPLOAD_FOLDER, filename) 
    except Exception as e: 
     return e 
    data = None 
    try: 
     with open(filepath) as file: 
      data = file.read() 
    except Exception as e: 
     log.exception(e) 

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

Должен ли я принимать данные от пользователя и возвращать сообщение об успешном завершении (, очевидно, что пользователь не сможет сразу получить доступ к файлу, а затем) и сделать данные в базе данных фоновым процессом, используя какую-то систему очередей , Или Что еще нужно сделать для оптимизации кода.

ответ

1

На стороне колбы убедитесь, что значение MAX_CONTENT_LENGTH конфигурации установлен достаточно высоко:

app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024 # 100MB limit 

Также вы можете посмотреть в Flask-Upload extension.

Существует еще один столбец, похожий на этот: Large file upload in Flask.

Помимо этого, проблема может быть таймаутом где-то вдоль линии. Как выглядит остальная часть вашего стека? Apache? Nginx и Gunicorn? Вы получаете ошибку Connection reset, ошибку Connection timed out или ее просто повесить?

Если вы используете Nginx, попробуйте установить proxy_read_timeout на значение, достаточное для завершения загрузки. Apache может также иметь настройку по умолчанию, вызывающую проблемы, если это то, что вы используете. Трудно сказать, не зная больше о вашем стеке и о том, что вы получаете, и о том, что показывают журналы.

Смежные вопросы