EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++

Как в API приложения разрабатываемое на Flask добавить получение большого бинарного файла?

Привет, Всем!

UPD: Переформулировал свой вопрос.

У меня есть задача связанная с разработкой фичи к API для моего REST-приложения на Flask, которую пока не могу понять как можно ее решить.

Подробнее:
1. Пишется приложение на Flask
2. Пишется для работы с бинарными файлами большого размера ( до 50 МБ)
3. Нагрузка на приложение не больше 3-4 клиентских приложений в течении 10 мин
4. Взаимодействие с приложением только посредством API

Надо:
Научить мое приложение принимать бинарные файлы большого размера, до 50 МБ. Другими словами мне нужно, чтобы клиентское приложение смогло послать бинарный файл HTTP POST-запросом на URI, к примеру такой "https://myservice.com/executable/". В ответ клиентское приложение получит JSON, в котором будет указан ID-отправленного файла.

N.B.: Нужно учесть факт того, что к приложению могут обращаться несколько клиентов и ни один из клиентов не должен ждать своей очереди.

У меня нет понимания решения проблем:
1. Как обойти факт того что Flask блокирующий и синхронный, но при этом продолжать использовать именно Flask пусть даже в связке с другим Framework-ом решающим то что не может Flask
2. Как передавать большие бинарные файлы?

Вчера Gen1us2k посоветовал использовать Twisted и Redis. В виду того что новичок мне хочется знать также и другие мнения
  • Вопрос задан
  • 3181 просмотр
Решения вопроса 1
EvilsInterrupt
@EvilsInterrupt Автор вопроса
System programming, Reversing Engineering, C++
Помогли советы, ответы и личная консультация Алексей и @Gen1us2k.

Конечный итог:

Сторона сервера, т.е. мое приложение:
Как то так:

app.config['UPLOAD_DIR'] = config.UPLOAD_DIR

@app.route('/uploads', methods='POST')
def upload_file():
   file = request.files['file']
   filename = secure_filename(file.filename)
   file.save(os.path(app.config['UPLOAD_DIR'],filename))


2.
Сторона клиента. Для тестовых целей, чтобы написать модульный тест проверяющий мое веб-приложение на Python воспользовался библиотекой requests. Достаточно легко гуглится и легко используется
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@bromzh
Drugs-driven development
Nginx
Ответ написан
Комментировать
@Gen1us2k
Для задачи выше хватит фласка. А если делать с файлом какую-нибудь долгую операцию - то лучше twisted.
Ответ написан
MAKAPOH
@MAKAPOH
многостаночник
Если вы точно уверены что одновременно у вас не будет более 4 клиентов, то запускайте ваше Flask приложение в 4+n процессов и всё (n дополнительных процессов нужны если кто то кроме загрузки файла будет слать ещё какие то запросы). Если вероятность "наплыва" клиентов более 4 одновременно отлична от 0 то ставьте рядом что то асинхронное (twisted, tornado и т.п.) и загрузку файлов обрабатывайте там.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы