11 месяцев назад История
README.md

Данный проект предоставляется “Как-есть” и содержит базовую реализацию интерфейса взаимодействия с Minio S3 хранилищем на Delphi Проект проверен да Delphi 10.3 Модуль UMinioAPI.pas является видоизмененным модулем DATA.Cloud.AmazonAPI (под взаимодействие с Minio) Основным модулем является UMinioMain.pas

Реализовано без привязки к WinAPI

Minio сервер Вы можете скачать отсюда: https://min.io/download#/kubernetes Подключение необходимо осуществлять к API (по умолчанию 9000 - ый порт): Для создания подключения необходимо в конструктор передать адрес сервера, логи и пароль (AccessKey,Secretkey если таковые созданы отдельно):

FMinioMain := TMinioConnection.Create(‘http://XXX.XXX.XXX.XXX:9000’, /// так-же поддерживается протокол https ‘admin’,‘password’);

Для проверки подключения необходимо вызвать функцию

if FMinioMain.CheckConnect then /// Вернёт True если подключение успешно установлено

Для получения объектной структуры Minio и приведения её к общему типу TAmazonBucketMinio необходимо выполнить функцию lstructur:=FMinioMain.GetStructur;

Для получения только части структуры по указанному пути необходимо вызвать функцию:

lstructur:=FMinioMain.GetStructurPathBucket(path); /// где Path это bucket/folder/folder/

В модуле UMinioMain.pas присутствуют методы взаимодействующие с компонентами FMX и TvirtualTable, это методы: 1. TAmazonBucketMinio.SetFMXTreeView /// Можно убрать процедуру - Процедура заполняет дерево FMX TTreeview по структуре minio 2. TAmazonBucketMinio.AsDataSet /// Можно изменить возврат в ClietDataSet – возвращает DataSet с атрибутами id,parentid для дальнейшего построения дерева в Grid

Проверить существование каталога либо Bucket можно с использованием функции:

FMinioMain.BucketExists(‘nnewBuck1’); FMinioMain.BucketExists(‘nnewBuck1/folder’);

True или False соответственно.

Создать новый bucket можно с использованием функции: FMinioMain.CreateBucket(‘nnewBuck’); /// Он возвращает ссылку на экземпляр класса TCloudResponseInfo(после обработки ответа не забывайте уничтожать экземпляр) описанный в модуле Data.Cloud.CloudAPI - класс содержит ответ сервера, StatusCode = 200 означает что все “ОК”

Для удаления Bucket необходимо использовать функцию FMinioMain.DeleteBucket(‘delbucket’); // Удаление Bucket возможно только если bucket пуст в противном случае в ответе TCloudResponseInfo вернется сообщение об ошибке

Если вернувшийся statuscode = 204 и statusmessage = ‘No Content’ значит корзина удалена успешно - в ином случае - признак ошибки (читать statusmessage)

Создать новый каталог в Minio можно используя следующую функцию: lcl := FMinioMain.CreateFolder(‘testbucket’, ‘/ns1’); lcl := FMinioMain.CreateFolder(‘testbucket’, ‘/new/Привет я новый каталог’);

В Новом каталоге по умолчанию создаётся файл .info (т.к mimio не позволяет создать каталог без файлов), lcl - TCloudResponseInfo

Для загрузки файла в католог использовать функцию:

FMinioMain.UploadFile(‘testbucket’, ‘/new/nsnew1/1.png’, ‘C:\Users\user\Pictures\img1.png’)

Где первым параметром передаётся Bucket, далее желаемый путь к обхкту внутри указанного Bucket, ссылка на файл на ПК/сервере. Возвращается ссылка на экземпляр TCloudResponseInfo

Для скачивания файла-объекта из Minio используется функция: FMinioMain.DownloadObject(‘testbucket’, ‘/new/nsnew1/img1.png’); Возвращает ссылку на Tstream - имеет ограничение в 2ГБ на файл

Для получения более крупных объектов необходимо использовать функцию: FMinioMain.DownloadAndSaveFile(‘testbucket’, ‘/new/nsnew1/img1.png’, ‘C:\Users\user\Pictures\result1.png’);

Возвращает True если файл был успешно создан (используется TFileStream).

Для получения свойств и мета-данных объекта из Minio необходимо вызывать функцию: FMinioMain.GetObjectProp(‘testbucket’, ‘/fordelete/Объекты которые будут обновлены.xlsx’) Функция возвращает запись RMetaPropObj (модуль UMinioMain) которая в свою очередь содержит два экземпляра объекта TStrings, в одном хранятся Meta-данные(Meta) в другом свойства (Prop) объекта. Если ничего не вернулось не один из листов создан не будет. (например по причине того что используется не “валидная” ссылка на объект)

Для удаления каталогов со всеми подкаталогами необходимо использовать функцию: FMinioMain.DeleteObject(‘testbucket’, ‘/fordelete1’, true);

aiscascade=true - удалить все подкаталоги и файлы внутри каталога /fordelete1 у бакета testbucket - будьте осторожны, подтверждение не спрашивает. StatusCode=200 означает успешное выполнение

Для одиночного файла (Объекта) необходимо использовать функцию:

FMinioMain.DeleteObject(‘testbucket’, ‘/fordelete/Опции_30122022 175928.xlsx’,false);

StatusCode=200 означает успешное выполнение

Получить перечень всех Bucket:

FMinioMain.GetAllRootBucket;

Функция возвращает TStrings с бакетами (рутовыми) из Minio - Names(наименование бакета), Values (время создания бакета)

FMinioMain.GetAllObjectInBucket(buckets/path); возвращает информацию о пути (prefix) или бакете в случае если передана только корзина GetAllObjectInBucket(buckets) – результат возвращается в виде ссылки на экземпляр класса TAmazonBucketResult (UMinioApi)

Описание класса: TAmazonBucketMinio = class(TAmazonBucketResult)

public destructor Destroy; override; property ListChildBucket: TList read FListChildBucket write FListChildBucket; //лист каталогов property BucketPath: string read Fbucketpath write Fbucketpath; function AsDataSet(aIsWhitOutInfo: Boolean = true): TVirtualTable; // Показать структуру как ataset procedure SetFMXTreeView(aTreeView: TTreeView; aIsWhitOutInfo: Boolean = true); /// заполнить дерево FMX

constructor Create(aName: string);
function BucketPathDecode: string; // получить преобразованный путь до Bucket 

end;

Класс TAmazonBucketResult содержит следующие полезные свойства: Objects - список объектов в каталоге/корзине - возвращает записи TAmazonObjectResult ObjectWhitOutInfo - функция возвращающая лист объектов в каталоге/корзине за исключением системного “.info” - возвращает записи TAmazonObjectResult prefixes - возвращает лист каталогов находящихся в бакете в виде TStrings

С целью избежания не правильной обработки при создании bucket, каталогов или файлов нельзя в наменовании использовать символ ‘+’ т.к при возврате он будет заменен на пробел. (Http Response)

В проект включено не большое демо (на быструю руку) с демонстрацией части возможностей. Проект собран под FMX

For English:

This project is provided “As-is” and contains a basic implementation of the interface for interacting with Minio S3 storage in Delphi The project is verified yes Delphi 10.3 The UMinioAPI.pas module is a modified DATA.Cloud module.AmazonAPI (for interaction with Minio) The main module is UMinioMain.pas

Implemented without binding to WinAPI

You can download the Minio server from here: https://min.io/download#/kubernetes The connection must be made to the API (by default, the 9000th port): To create a connection, you need to pass the server address, logs and password to the constructor (AccessKey, Secretkey if they are created separately):

FMinioMain := TMinioConnection.Create(’http://XXX.XXX.XXX.XXX:9000 ’, /// https protocol is also supported ‘admin’,‘password’);

To check the connection, you need to call the function

if FMinioMain.CheckConnect then /// Returns True if the connection is successfully established

To get the Minio object structure and bring it to the general TAmazonBucketMinio type, you need to execute the lstructur function :=FMinioMain.GetStructur;

To get only a part of the structure along the specified path, you need to call the function:

lstructur:=FMinioMain.GetStructurPathBucket(path); /// where Path is bucket/folder/folder/

In the UMinioMain.pas module there are methods interacting with FMX and TvirtualTable components, these are methods: 1. TAmazonBucketMinio.SetFMXTreeView /// You can remove the procedure - The procedure fills the FMX TTreeView tree according to the minio structure 2. TAmazonBucketMinio.AsDataSet /// You can change the return to ClietDataSet – returns a DataSet with id,parentid attributes for further building the tree in the Grid

You can check the existence of a directory or Bucket using the function:

FMinioMain.BucketExists(‘nnewBuck1’); FMinioMain.BucketExists(‘nnewBuck1/folder’);

True or False, respectively.

You can create a new bucket using the function: FMinioMain.CreateBucket(‘nnewBuck’); /// It returns a reference to an instance of the TCloudResponseInfo class (after processing the response, do not forget to destroy the instance) described in the Data.Cloud module.The CloudAPI class contains the server response, statusCode = 200 means that everything is “OK”

To delete a Bucket, you need to use the function FMinioMain.DeleteBucket(‘delbucket’); // Deleting Bucket is possible only if bucket is empty otherwise an error message will be returned in the TCloudResponseInfo response

If the returned statuscode = 204 and statusmessage = ‘No Content’ means the trash was deleted successfully - otherwise, an error sign (read statusmessage)

You can create a new directory in Minio using the following function: lcl := FMinioMain.CreateFolder(‘testbucket’, ‘/ns1’); lcl := FMinioMain.CreateFolder(‘testbucket’, ‘/new/Hi I’m a new directory’);

A .info file is created in the New directory by default (because mimio does not allow creating a directory without files), lcl - TCloudResponseInfo

To upload a file to the catologist, use the function:

FMinioMain.UploadFile(‘testbucket’, ‘/new/nsnew1/1.png’, ’C:\Users\user\Pictures\img1.png ’)

Where Bucket is passed as the first parameter, then the desired path to the object inside the specified Bucket, a link to the file on the PC/server. A reference to the TCloudResponseInfo instance is returned

To download an object file from Minio, use the function: FMinioMain.DownloadObject(‘testbucket’, ‘/new/nsnew1/img1.png’); Returns a link to Tstream - has a limit of 2GB per file

To get larger objects, you need to use the function: FMinioMain.DownloadAndSaveFile(‘testbucket’, ‘/new/nsnew1/img1.png’, ‘C:\Users\user\Pictures\result1.png’);

Returns True if the file was created successfully (TFileStream is used).

To get the properties and meta-data of an object from Minio, you need to call the function: FMinioMain.GetObjectProp(‘testbucket’, ‘/fordelete/Objects to be updated.xlsx’) The function returns the RMetaPropObj record (UMinioMain module), which in turn contains two instances of the TStrings object, one stores Meta data(Meta) and the other the properties (Prop) of the object. If nothing is returned, not one of the sheets will be created. (for example, due to the fact that a non-“valid” reference to the object is used)

To delete directories with all subdirectories, use the function: FMinioMain.DeleteObject(‘testbucket’, ‘/fordelete1’, true);

aiscascade=true - delete all subdirectories and files inside the /fordelete1 directory from the testbucket bucket - be careful, confirmation does not ask. statusCode=200 means successful execution

For a single file (Object), you must use the function:

FMinioMain.DeleteObject(‘testbucket’, ’/fordelete/Option_30122022 175928.xlsx ’,false);

statusCode=200 means successful execution

Get a list of all Bucket:

FMinioMain.GetAllRootBucket;

The function returns TStrings with buckets (root) from Minio - Names(bucket name), Values (bucket creation time)

FMinioMain.GetAllObjectInBucket(buckets/path); returns information about the path (prefix) or bucket if only the GetAllObjectInBucket(buckets) bucket is passed – the result is returned as a reference to an instance of the TAmazonBucketResult (UMinioApi) class

Class Description: TAmazonBucketMinio = class(TAmazonBucketResult)

public destructor Destroy; override; property ListChildBucket: TList read FListChildBucket write FListChildBucket; //directory list property BucketPath: string read Fbucketpath write Fbucketpath; function AsDataSet(aIsWhitOutInfo: Boolean = true): TVirtualTable; // Show structure as ataset procedure SetFMXTreeView(aTreeView: TTreeView; aIsWhitOutInfo: Boolean = true); /// fill in the FMX tree

constructor Create(aName: string); function BucketPathDecode: string; // get the converted path to Bucket end;

The TAmazonBucketResult class contains the following useful properties: Objects - list of objects in the directory/bucket - returns TAmazonObjectResult entries ObjectWhitOutInfo is a function that returns a list of objects in the directory/bucket with the exception of the system “.info” - returns TAmazonObjectResult prefixes entries - returns a list of directories in the bucket in the form of TStrings

In order to avoid incorrect processing when creating a bucket, directories or files, it is impossible to use the ‘+’ symbol in the substitution, because when returning it will be replaced with a space. (Http Respons)

The project includes a small demo (for a quick hand) with a demonstration of some of the features. The project is assembled under FMX

Последние обновления (04/12/2023): Проведена оптимизация модуля UMinioMain на предмет утечек памяти. Пожалуйста не забываейте очищать объекты вовзращаемые из экземпляров Добавлена функция CopyObject Добавлен обработчик каскадного сохранения и архивации содержимого в ZIP - DownloadZipOnCatalog

Recent updates (04/12/2023): The UMinioMain module has been optimized for memory leaks. Please do not forget to clean up objects returned from instances Added the copyObject function Added a handler for cascading saving and archiving content in ZIP - Download Zip On Catalog

Описание

Интерфейс S3 адаптированный под работу с Minio S3

Конвейеры
0 успешных
0 с ошибкой