1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-17 21:08:03 +02:00

S3: Помещение и удаление объекта, заголовки в выводе

This commit is contained in:
Anton 2024-11-15 21:52:07 +03:00
parent e589a14b91
commit 9a29efa0d0
35 changed files with 3527 additions and 3240 deletions

View File

@ -58,13 +58,15 @@ This library uses its own response format to provide data received from the serv
{
"status": 200,
"response": {}
"response": {},
"headers": {}
}
```
+ The **status** field contains the HTTP response status code
+ The **response** field contains the body of the original S3 response, previously converted from XML to JSON
+ The **headers** field contains the headers from the original response
The response was modified to JSON to simplify its usage, as the original XML format was more complex to work with

View File

@ -58,12 +58,14 @@ sidebar_class_name: S3
{
"status": 200,
"response": {}
"response": {},
"headers": {}
}
```
+ В поле **status** записывается код состояния HTTP-ответа
+ В поле **response** помещается тело оригинального ответа S3, предварительно преобразованное из XML в JSON
+ В поле **headers** помещаются заголовки из оригинального ответа
Это сделано для упрощения работы с библиотекой, так как формат XML более громоздок и сложен в работе, по сравнению с JSON

View File

@ -1,8 +0,0 @@
 {
"status": 200,
"response": {
"VersioningConfiguration": {
"Status": "Enabled"
}
}
}

View File

@ -1,8 +0,0 @@
 {
"status": 200,
"response": {
"VersioningConfiguration": {
"Status": "Enabled"
}
}
}

View File

@ -1,31 +0,0 @@
 {
"status": 200,
"response": {
"ListAllMyBucketsResult": {
"Owner": {
"ID": "02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4",
"DisplayName": "minio"
},
"Buckets": {
"Bucket": [
{
"Name": "newbucket2",
"CreationDate": "2024-11-13T18:59:09.139Z"
},
{
"Name": "opi-dirbucket3",
"CreationDate": "2024-11-15T11:13:55.166Z"
},
{
"Name": "opi-gpbucket3",
"CreationDate": "2024-11-15T11:13:57.731Z"
},
{
"Name": "opi-newbucket2",
"CreationDate": "2024-11-14T06:04:12.769Z"
}
]
}
}
}
}

View File

@ -1,7 +0,0 @@
 {
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67YCVDZRRQVI",
"SecretKey": "***",
"Region": "BTC",
"Service": "s3"
}

View File

@ -1,19 +0,0 @@
 {
"status": 200,
"response": {
"Tagging": {
"TagSet": {
"Tag": [
{
"Key": "MyTag2",
"Value": "AnotherOne"
},
{
"Key": "MyTag1",
"Value": "SomeValue"
}
]
}
}
}
}

View File

@ -1,19 +0,0 @@
 {
"status": 200,
"response": {
"Tagging": {
"TagSet": {
"Tag": [
{
"Key": "MyTag1",
"Value": "SomeValue"
},
{
"Key": "MyTag2",
"Value": "AnotherOne"
}
]
}
}
}
}

View File

@ -1,4 +0,0 @@
 {
"status": 404,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 200,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 200,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 200,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 204,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 204,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 204,
"response": {}
}

View File

@ -1 +0,0 @@
 НЕ JSON: Соответствие

View File

@ -1,4 +0,0 @@
 {
"status": 204,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 204,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 200,
"response": {}
}

View File

@ -1,4 +0,0 @@
 {
"status": 200,
"response": {}
}

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,7 @@
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
//@skip-check constructor-function-return-section
// Раскомментировать, если выполняется OneScript
#Использовать "../../tools"
@ -79,7 +80,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки);
@ -97,7 +98,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки);
@ -122,7 +123,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция СоздатьБакет(Знач Наименование, Знач ОсновныеДанные, Знач Каталог = Истина, Знач Заголовки = Неопределено) Экспорт
Ответ = УправлениеБакетом(Наименование, ОсновныеДанные, Каталог, "PUT", Заголовки);
@ -143,7 +144,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьБакет(Знач Наименование, Знач ОсновныеДанные, Знач Каталог = Истина, Знач Заголовки = Неопределено) Экспорт
Ответ = УправлениеБакетом(Наименование, ОсновныеДанные, Каталог, "DELETE", Заголовки);
@ -165,7 +166,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПроверитьДоступностьБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -199,7 +200,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач XMLКонфигурация
@ -234,7 +235,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -266,7 +267,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -300,7 +301,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьТегиБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Теги
@ -336,7 +337,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьТегиБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -367,7 +368,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьТегиБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -400,7 +401,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьНастройкиВерсионированияБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Статус = Неопределено
@ -437,7 +438,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьНастройкийВерсионированияБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -469,7 +470,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьСписокБакетов(Знач ОсновныеДанные
, Знач Префикс = ""
, Знач Регион = ""
@ -495,6 +496,130 @@
#КонецОбласти
#Область РаботаСОбъектами
// Загрузить объект
// Загружает файл в бакет
//
// Примечание:
// Метод в документации AWS: [PutObject](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
//
// Параметры:
// Наименование - Строка - Наименование объекта в бакете - title
// Бакет - Строка - Имя бакета для загрузки объекта - bucket
// Содержимое - Строка, ДвоичныеДанные - Данные или путь к файлу для загрузки - data
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - basic
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ЗагрузитьОбъект(Знач Наименование
, Знач Бакет
, Знач Содержимое
, Знач ОсновныеДанные
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Бакет, Ложь);
URL = URL + Наименование;
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, Содержимое, Заголовки);
Возврат Ответ;
КонецФункции
// Получить описание объекта
// Получает информацию о характеристиках объекта в бакете
//
// Примечание:
// Метаданные объекты содержатся в заголовках
// Метод в документации AWS: [GetObjectAttributes](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html)
//
// Параметры:
// Наименование - Строка - Наименование объекта в бакете - title
// Бакет - Строка - Имя бакета, в котором находится объект - bucket
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - basic
// Версия - Строка - Токен для получения конкретной версии объекта - ver
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьОписаниеОбъекта(Знач Наименование
, Знач Бакет
, Знач ОсновныеДанные
, Знач Версия = Неопределено
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Бакет, Ложь);
URL = URL + Наименование;
Если ЗначениеЗаполнено(Версия) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Версия);
URL = URL + "?versionId=" + Версия;
КонецЕсли;
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("HEAD", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
// Удалить объект
// Удаляет объект из бакета
//
// Примечание:
// Метод в документации AWS: [DeleteObject](@docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
//
// Параметры:
// Наименование - Строка - Наименование объекта в бакете - title
// Бакет - Строка - Имя бакета для загрузки объекта - bucket
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - basic
// Версия - Строка - Токен для удаления конкретной версии объекта - ver
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьОбъект(Знач Наименование
, Знач Бакет
, Знач ОсновныеДанные
, Знач Версия = Неопределено
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Бакет, Ложь);
URL = URL + Наименование;
Если ЗначениеЗаполнено(Версия) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Версия);
URL = URL + "?versionId=" + Версия;
КонецЕсли;
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("DELETE", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@ -715,7 +840,7 @@
КонецФункции
Функция ПолучитьURLСервиса(Знач ОсновныеДанные)
Функция ПолучитьURLСервиса(ОсновныеДанные)
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОсновныеДанные);
@ -822,12 +947,13 @@
Функция ОформитьОтвет(Знач Ответ, Знач ОжидаютсяДвоичные = Ложь)
Статус = Ответ.КодСостояния;
Статус = Ответ.КодСостояния;
Заголовки = Ответ.Заголовки;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеТела = Новый Структура;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ТелоОтвета = СокрЛП(ТелоОтвета);
@ -842,9 +968,10 @@
КонецЕсли;
ДанныеОтвета = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("status" , Статус);
ДанныеОтвета.Вставить("response", ДанныеТела);
ДанныеОтвета.Вставить("headers" , Заголовки);
Иначе
ДанныеОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();

View File

@ -2138,6 +2138,22 @@
КонецПроцедуры
Процедура AWS_РаботаСОбъектами() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_AccessKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_SecretKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_URL" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
S3_СоздатьБакет(ПараметрыТеста);
S3_ЗагрузитьОбъект(ПараметрыТеста);
S3_ПолучитьОписаниеОбъекта(ПараметрыТеста);
S3_УдалитьОбъект(ПараметрыТеста);
S3_УдалитьБакет(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -14778,13 +14794,14 @@
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПроверитьДоступностьБакета", "S3"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат); // SKIP
ОсновныеДанные.Вставить("URL", ПараметрыФункции["S3_URL"]); // SKIP
Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина, "1234");
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПроверитьДоступностьБакета (аккаунт)", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3НеНайдено(Результат);
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
@ -14803,7 +14820,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3", Истина);
КонецПроцедуры
@ -15012,6 +15028,70 @@
КонецПроцедуры
Процедура S3_ЗагрузитьОбъект(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Содержимое = ПараметрыФункции["Picture"]; // URL, Путь или Двоичные данные
Результат = OPI_S3.ЗагрузитьОбъект(Наименование, Бакет, Содержимое, ОсновныеДанные);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьОбъект", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
Процедура S3_УдалитьОбъект(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Результат = OPI_S3.УдалитьОбъект(Наименование, Бакет, ОсновныеДанные);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьОбъект", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
Процедура S3_ПолучитьОписаниеОбъекта(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Результат = OPI_S3.ПолучитьОписаниеОбъекта(Наименование, Бакет, ОсновныеДанные);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьОписаниеОбъекта", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -16464,7 +16464,7 @@
Метод = "GET";
Опции = Новый Структура;
Опции.Вставить("metod", Метод);
Опции.Вставить("method", Метод);
Опции.Вставить("basic", ОсновныеДанные);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("s3", "ОтправитьЗапросБезТела", Опции);
@ -16494,7 +16494,7 @@
Тело = "C:\test_data\document.docx";
Опции = Новый Структура;
Опции.Вставить("metod", Метод);
Опции.Вставить("method", Метод);
Опции.Вставить("basic", ОсновныеДанные);
Опции.Вставить("body" , Тело);
@ -16682,7 +16682,6 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("s3", "ПолучитьШифрованиеБакета", Опции);
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
КонецПроцедуры

View File

@ -256,6 +256,7 @@
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеСчетчиками" , "Управление счетчиками" , Метрика);
НовыйТест(ТаблицаТестов, "AWS_ОбщиеМетоды" , "Общие методы" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
Возврат ТаблицаТестов;
@ -2039,9 +2040,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции
@ -2125,7 +2126,7 @@
Для Каждого СекретныйКлюч Из МассивСекретов Цикл
Если СтрНайти(Имя, СекретныйКлюч) <> 0 Тогда
Если СтрНайти(нРег(Имя), СекретныйКлюч) <> 0 Тогда
Значение = "***";
КонецЕсли;

View File

@ -37,6 +37,7 @@
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
//@skip-check constructor-function-return-section
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
@ -79,7 +80,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки);
@ -97,7 +98,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки);
@ -122,7 +123,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция СоздатьБакет(Знач Наименование, Знач ОсновныеДанные, Знач Каталог = Истина, Знач Заголовки = Неопределено) Экспорт
Ответ = УправлениеБакетом(Наименование, ОсновныеДанные, Каталог, "PUT", Заголовки);
@ -143,7 +144,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьБакет(Знач Наименование, Знач ОсновныеДанные, Знач Каталог = Истина, Знач Заголовки = Неопределено) Экспорт
Ответ = УправлениеБакетом(Наименование, ОсновныеДанные, Каталог, "DELETE", Заголовки);
@ -165,7 +166,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПроверитьДоступностьБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -199,7 +200,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач XMLКонфигурация
@ -234,7 +235,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -266,7 +267,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -300,7 +301,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьТегиБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Теги
@ -336,7 +337,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьТегиБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -367,7 +368,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьТегиБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -400,7 +401,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьНастройкиВерсионированияБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Статус = Неопределено
@ -437,7 +438,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьНастройкийВерсионированияБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
@ -469,7 +470,7 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьСписокБакетов(Знач ОсновныеДанные
, Знач Префикс = ""
, Знач Регион = ""
@ -495,6 +496,130 @@
#КонецОбласти
#Область РаботаСОбъектами
// Загрузить объект
// Загружает файл в бакет
//
// Примечание:
// Метод в документации AWS: [PutObject](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
//
// Параметры:
// Наименование - Строка - Наименование объекта в бакете - title
// Бакет - Строка - Имя бакета для загрузки объекта - bucket
// Содержимое - Строка, ДвоичныеДанные - Данные или путь к файлу для загрузки - data
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - basic
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ЗагрузитьОбъект(Знач Наименование
, Знач Бакет
, Знач Содержимое
, Знач ОсновныеДанные
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Бакет, Ложь);
URL = URL + Наименование;
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, Содержимое, Заголовки);
Возврат Ответ;
КонецФункции
// Получить описание объекта
// Получает информацию о характеристиках объекта в бакете
//
// Примечание:
// Метаданные объекты содержатся в заголовках
// Метод в документации AWS: [GetObjectAttributes](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html)
//
// Параметры:
// Наименование - Строка - Наименование объекта в бакете - title
// Бакет - Строка - Имя бакета, в котором находится объект - bucket
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - basic
// Версия - Строка - Токен для получения конкретной версии объекта - ver
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьОписаниеОбъекта(Знач Наименование
, Знач Бакет
, Знач ОсновныеДанные
, Знач Версия = Неопределено
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Бакет, Ложь);
URL = URL + Наименование;
Если ЗначениеЗаполнено(Версия) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Версия);
URL = URL + "?versionId=" + Версия;
КонецЕсли;
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("HEAD", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
// Удалить объект
// Удаляет объект из бакета
//
// Примечание:
// Метод в документации AWS: [DeleteObject](@docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
//
// Параметры:
// Наименование - Строка - Наименование объекта в бакете - title
// Бакет - Строка - Имя бакета для загрузки объекта - bucket
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - basic
// Версия - Строка - Токен для удаления конкретной версии объекта - ver
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УдалитьОбъект(Знач Наименование
, Знач Бакет
, Знач ОсновныеДанные
, Знач Версия = Неопределено
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Бакет, Ложь);
URL = URL + Наименование;
Если ЗначениеЗаполнено(Версия) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Версия);
URL = URL + "?versionId=" + Версия;
КонецЕсли;
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("DELETE", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@ -822,12 +947,13 @@
Функция ОформитьОтвет(Знач Ответ, Знач ОжидаютсяДвоичные = Ложь)
Статус = Ответ.КодСостояния;
Статус = Ответ.КодСостояния;
Заголовки = Ответ.Заголовки;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеТела = Новый Структура;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ТелоОтвета = СокрЛП(ТелоОтвета);
@ -842,9 +968,10 @@
КонецЕсли;
ДанныеОтвета = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("status" , Статус);
ДанныеОтвета.Вставить("response", ДанныеТела);
ДанныеОтвета.Вставить("headers" , Заголовки);
Иначе
ДанныеОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();

View File

@ -256,6 +256,7 @@
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеСчетчиками" , "Управление счетчиками" , Метрика);
НовыйТест(ТаблицаТестов, "AWS_ОбщиеМетоды" , "Общие методы" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
Возврат ТаблицаТестов;

View File

@ -2138,6 +2138,22 @@
КонецПроцедуры
Процедура AWS_РаботаСОбъектами() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_AccessKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_SecretKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_URL" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
S3_СоздатьБакет(ПараметрыТеста);
S3_ЗагрузитьОбъект(ПараметрыТеста);
S3_ПолучитьОписаниеОбъекта(ПараметрыТеста);
S3_УдалитьОбъект(ПараметрыТеста);
S3_УдалитьБакет(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -14778,13 +14794,14 @@
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПроверитьДоступностьБакета", "S3"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат); // SKIP
ОсновныеДанные.Вставить("URL", ПараметрыФункции["S3_URL"]); // SKIP
Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина, "1234");
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПроверитьДоступностьБакета (аккаунт)", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3НеНайдено(Результат);
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
@ -14803,7 +14820,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3", Истина);
КонецПроцедуры
@ -15012,6 +15028,70 @@
КонецПроцедуры
Процедура S3_ЗагрузитьОбъект(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Содержимое = ПараметрыФункции["Picture"]; // URL, Путь или Двоичные данные
Результат = OPI_S3.ЗагрузитьОбъект(Наименование, Бакет, Содержимое, ОсновныеДанные);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьОбъект", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
Процедура S3_УдалитьОбъект(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Результат = OPI_S3.УдалитьОбъект(Наименование, Бакет, ОсновныеДанные);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьОбъект", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
Процедура S3_ПолучитьОписаниеОбъекта(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Результат = OPI_S3.ПолучитьОписаниеОбъекта(Наименование, Бакет, ОсновныеДанные);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьОписаниеОбъекта", "S3");
OPI_ПолучениеДанныхТестов.Проверка_S3Успех(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -16682,7 +16682,6 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("s3", "ПолучитьШифрованиеБакета", Опции);
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
КонецПроцедуры