Данный компонент для загрузки на сервер файлов, отображения файлов, удаления, поиска, сортировки и так далее. Пользователь, в некотором документе хочет добавить файл – открывается клиент этого компонента – он видит те файлы, которые он уже загрузил ранее, и может загрузить ещё. Компонент работает поверх базы MySQL. В итоге пользователь вставляет файл в документ. Само событие вставки я пока не сделал, но там ничего сложного, это уже как поставить флаг, когда забрался на Эльбрус.
Самое сложное здесь было реализация отправки файлов чанками в разных потоках. Я ограничил максимально возможное одновременное число отправляемых файлов в потоках пятью. Размер чанка установил в 4 мб. Размер загружаемого файла никак не ограничивал. Тестировал с 2,7 Гб, все успешно.
Файлы грузятся последовательно, через единый компонент idHTTP, чтобы не перегружать сервер, так сказать. При одновременной загрузке нескольких файлов выстраивается очередь из потоков, которые используют единый код, обернутый в критическую секцию, что позволяет грузить файлы один за одним. При желании можно конечно и распараллелить загрузку файлов, но я решил этого не делать, так как это будет лишняя и ненужная для решаемой задачи нагрузка на сервер.
Клиент
Сервер
Исходники
373_PS_HTTPClient_Dev
Модель базы данных (mySQL)
ModelDB2
Компонент построен на FDTable, что позволяет грузить миллионы записей, которые будут отображаться в 2 окна и отображаться динамически. В следующей версии думаю прикрутить галерею для отображения файлов.
Документация в папках PasDOC
Ограничение на число одновременно загружаемых файлов – 5. Файлы загружаются последовательно в потоках, используя один на всех компонент idHTTP;
Файлы загружаются на сервер в структуре public/files/idUser/2017/01/18, все остальные папки создаются и удаляются автоматически и нужны лишь для временного размещения чанков.
Если загружается файл с таким же именем, как уже есть на сервере в папке текущего дня, то создается его копия. Файлы всегда загружаются.
Размер загружаемых файлов не ограничен. Размер чанков сейчас 4 мб. При желании это можно поправить в коде.
Реализован алгоритм создания уникального имени путем добавления цифр в скобках, счетчика. SomeFile(1), SomeFile(2),
Сервер загружается в трэй
Режимы – все файлы либо файлы по датам (иерархическая структура).
Поиск, сортировка
Фильтрация по типам файлов – изображения, видео, аудио, все файлы.
Сервер по сформированной ссылке выдает файл на загрузку. Это можно будет переписать на отображение картинки картинкой, видео – видео и др.
Проектная группа выглядит следующим образом
Основные таблицы базы данных
Небольшая инструкция
Открыть проект, прописать все пути в SearchPath проекта
Инсталлировать bpl
Запустить сервер, запустить клиент