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

28

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

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

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

Клиент

31

29

Сервер

26

Исходники

Continue reading

Delphi. Простейший способ измерить время

21

Добавляем TTImer в программу

Фиксируем начальное время и запускаем таймер в OnCreate или на какой-то кнопке

Обработка таймера

Люблю быстрые и простые решения

Delphi. Алгоритмы. Создание уникального имени через добавление номера в конце в скобках. Например SomeFile(1), SomeFile(2) и др.

20

Итак, пусть у нас в некоторой директории находится файл SomeFile, сделаем так, чтобы при добавлении следующего файла с именем SomeFile, в директории оказался файл SomeFile(1), SomeFile(2), SomeFile(3). При отсутствии этого файла в директорию копируется просто файл. Данная задача возникла в результате разработки решения для передачи файлов по HTTP протоколу. Нужно было сделать так, чтобы при каждой передаче файл в обязательном порядке копировался и сохранялся под новым именем в любом случае, даже если он там уже есть. Не перезаписывал существующий, а создавал новый, с каким-то другим именем.

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

Основная функция

Здесь у нас список имен, с которыми нужно сравнивать, это имена из директории. А также само имя, которое должно быть уникальным.

Эта функция опирается на следующую – добавление номера в скобки на конце Continue reading

C#. Создание и инициализация массивов

 

Delphi. idHTTP.Get и русские символы

Мне нужно было на свой собственный сервер отправлять запрос на получение картинки, например по адресу

делал это через idHTTP.Get, но все русские символы либо обрезались либо уходили в виде ????????, уже сталкивался с этой проблемой, поэтому решил просто использовать System.NetEncoding следующим образом

uses

 

Обратите внимание, кодирую только URI, то есть всегда должна быть часть

http://somehost:someport/ Continue reading

Delphi. DBGrid. Как пробежаться и собрать значения определенного поля выделенных записей?

DBGrid включаем в режим multiSelect. На примере сбора поля ID из базы данных

12


 

 

Delphi. FireDAC. Проверка на NULL и запись NULL значений в базу данных

Проверка на NULL

Запись NULL значений, согласно инструкции

 

 

C#. Пример на перечисления и массивы

Вот что у нас получится

9

А вот собственно код…

 

C#. HelloWorld. I love you C#

Попрактикуемся в C#. Традиционный Hello world

8