Как стать автором
Обновить

Превращаем школьный электронный журнал в файлообменник

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4K

Привет, Хабр. В этой статье я продолжу изучение возможностей электронного журнала(прошлая статья).

На этот раз поговорим о загрузке файлов, квоте и написание простой утилиты для хранения файлов на серверах электронного журнала

Анализ

Для начала стоит рассказать, откуда в школьном журнале есть функционал хранения файлов у учеников. Он нужен для того, чтобы отправлять письма с вложениями внутри ЭлЖура.

Этот функционал меня крайне заинтересовал, поэтому я перенос запрос в PostMan и начал разбираться

JWT_TOKEN - Jwt токен, который отдает главное приложение при входе

SCHOOL_DOMAIN - кодовый домен школы, чтобы элжур понимал, какие пользователи там есть

Так выглядит ответ от сервера, когда запрос удался

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

Пример ссылки (рабочий) :

https://edu-storage-1.gounn.ru/storage/fedf030925d24edd861c66b4d7d46241?filename=rufus-4.7p.exe&domain=nnov0739

https://edu-storage-1.gounn.ru/storage/4095602b322e78db1c87ffd67281e076?filename=tank-t34.jpg&domain=nnov0739

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

Если попробовать загрузить большой файл, то получим ошибку. Максимальный вес файла - 50мб.

Написание скриптов

Скрипты в этой статье набросок, а не готовая программа. Они нужны лишь для технической обоснованности идеи. Не стоит оценивать их красоту, а точнее ее отсутствие)

Ограничения в 50мб очень сильно расстраивают, но их можно обойти

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

Для удобство программа сохраняет ссылки в json файл. Вот его вид:

Для примера, ссылка на json для вышеупомянутого debian образа тык

Не забываем и про целостность файлов

Проверка была выполнена на ~20 файлах, все было хорошо, хеши совпадали

Пупупу

Однако во время проведения экспериментов была найдена интересная деталь…..

Да, сервис хранилища не проверял истечения токена. В JWT токенах хранится timestamp, после которого токен считается невалидным. В нашем примере он находится в поле exp. НО сервер просто не проверяет его истечение

        

В этот раз для отправки отчета я выбрал более интересный путь)
Попробовал написать знакомым в этой области. Как итог, в тот же день отчет был у разработчиков)

Замеры скорости

Так как мы делаем файловое хранилище, скорость очень важна.

Скрин с диспетчера задач Windows

Замер из диспетчера задач Windows

Канал

300 мбит

Скорость до хранилища

~230 мбит

Географическое положение

Нижний Новгород

btop на Linux

Канал

300 мбит

Скорость до хранилища

~130 мбит

Географическое положение

Москва


Выводы

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

Понятно, что применение такого обменника сомнительно в реальности, но статья больше направлена на освещение интересных возможностей в Электронном журнале

До скорых встреч)

Материалы из статьи

JSON-File для скачивания дебиана

Github репозиторий с кодом

Теги:
Хабы:
+32
Комментарии9

Публикации