Delphi. Мои компоненты. Компонент idHTTPClient. Отправка файлов по HTTP протоколу чанками, удаление файлов, отображение через базу данных

Данный компонент для загрузки на сервер файлов, отображения файлов, удаления, поиска, сортировки и так далее. Пользователь, в некотором документе хочет добавить файл – открывается клиент этого компонента – он видит те файлы, которые он уже загрузил ранее, и может загрузить ещё.  Компонент работает поверх базы MySQL. В итоге пользователь вставляет файл в документ. Само событие вставки я пока не сделал, но там ничего сложного, это уже как поставить флаг, когда забрался на Эльбрус.

Самое сложное здесь было реализация отправки файлов чанками в разных потоках. Я ограничил максимально возможное одновременное число отправляемых файлов в потоках пятью. Размер чанка установил в 4 мб. Размер загружаемого файла никак не ограничивал. Тестировал с 2,7 Гб, все успешно.

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

Клиент

31

29

Сервер

26

Исходники

373_PS_HTTPClient_Dev

Модель базы данных (mySQL)

ModelDB2

Компонент построен на FDTable, что позволяет грузить миллионы записей, которые будут отображаться в 2 окна и отображаться динамически. В следующей версии думаю прикрутить галерею для отображения файлов.

Документация в папках PasDOC

Ограничение на число одновременно загружаемых файлов – 5. Файлы загружаются последовательно в потоках, используя один на всех компонент idHTTP;

Файлы загружаются на сервер в структуре public/files/idUser/2017/01/18, все остальные папки создаются и удаляются автоматически и нужны лишь для временного размещения чанков.

Если загружается файл с таким же именем, как уже есть на сервере в папке текущего дня, то создается его копия. Файлы всегда загружаются.

Размер загружаемых файлов не ограничен. Размер чанков сейчас 4 мб. При желании это можно поправить в коде.

Реализован алгоритм создания уникального имени путем добавления цифр в скобках, счетчика. SomeFile(1), SomeFile(2),

Сервер загружается в трэй

Режимы – все файлы либо файлы по датам (иерархическая структура).

Поиск, сортировка

Фильтрация по типам файлов – изображения, видео, аудио, все файлы.

Сервер по сформированной ссылке выдает файл на загрузку. Это можно будет переписать на отображение картинки картинкой, видео – видео и др.

Проектная группа выглядит следующим образом

27

Основные таблицы базы данных

30

Небольшая инструкция

Открыть проект, прописать все пути в SearchPath проекта

Инсталлировать bpl

Запустить сервер, запустить клиент

This entry was posted in Delphi, Мои компоненты. Bookmark the permalink.

Leave a Reply