1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-05-22 10:05:29 +02:00

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

This commit is contained in:
Anton
2024-11-15 21:52:07 +03:00
parent 74177d69b1
commit 6c327254e3
35 changed files with 3527 additions and 3240 deletions
+3 -1
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
+3 -1
View File
@@ -58,12 +58,14 @@ sidebar_class_name: S3
{
"status": 200,
"response": {}
"response": {},
"headers": {}
}
```
+ В поле **status** записывается код состояния HTTP-ответа
+ В поле **response** помещается тело оригинального ответа S3, предварительно преобразованное из XML в JSON
+ В поле **headers** помещаются заголовки из оригинального ответа
Это сделано для упрощения работы с библиотекой, так как формат XML более громоздок и сложен в работе, по сравнению с JSON
@@ -1,8 +0,0 @@
{
"status": 200,
"response": {
"VersioningConfiguration": {
"Status": "Enabled"
}
}
}
@@ -1,8 +0,0 @@
{
"status": 200,
"response": {
"VersioningConfiguration": {
"Status": "Enabled"
}
}
}
@@ -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"
}
]
}
}
}
}
@@ -1,7 +0,0 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67YCVDZRRQVI",
"SecretKey": "***",
"Region": "BTC",
"Service": "s3"
}
@@ -1,19 +0,0 @@
{
"status": 200,
"response": {
"Tagging": {
"TagSet": {
"Tag": [
{
"Key": "MyTag2",
"Value": "AnotherOne"
},
{
"Key": "MyTag1",
"Value": "SomeValue"
}
]
}
}
}
}
@@ -1,19 +0,0 @@
{
"status": 200,
"response": {
"Tagging": {
"TagSet": {
"Tag": [
{
"Key": "MyTag1",
"Value": "SomeValue"
},
{
"Key": "MyTag2",
"Value": "AnotherOne"
}
]
}
}
}
}
@@ -1,4 +0,0 @@
{
"status": 404,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 204,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 204,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 204,
"response": {}
}
@@ -1 +0,0 @@
НЕ JSON: Соответствие
@@ -1,4 +0,0 @@
{
"status": 204,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 204,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
@@ -1,4 +0,0 @@
{
"status": 200,
"response": {}
}
+3059 -3041
View File
File diff suppressed because it is too large Load Diff
+145 -18
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_ПреобразованиеТипов.ПолучитьКоллекцию(ОсновныеДанные);
@@ -823,11 +948,12 @@
Функция ОформитьОтвет(Знач Ответ, Знач ОжидаютсяДвоичные = Ложь)
Статус = Ответ.КодСостояния;
Заголовки = Ответ.Заголовки;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеТела = Новый Структура;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ТелоОтвета = СокрЛП(ТелоОтвета);
@@ -842,9 +968,10 @@
КонецЕсли;
ДанныеОтвета = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("status" , Статус);
ДанныеОтвета.Вставить("response", ДанныеТела);
ДанныеОтвета.Вставить("headers" , Заголовки);
Иначе
ДанныеОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
@@ -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Успех(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -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_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
КонецПроцедуры
@@ -256,6 +256,7 @@
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеСчетчиками" , "Управление счетчиками" , Метрика);
НовыйТест(ТаблицаТестов, "AWS_ОбщиеМетоды" , "Общие методы" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
Возврат ТаблицаТестов;
@@ -2125,7 +2126,7 @@
Для Каждого СекретныйКлюч Из МассивСекретов Цикл
Если СтрНайти(Имя, СекретныйКлюч) <> 0 Тогда
Если СтрНайти(нРег(Имя), СекретныйКлюч) <> 0 Тогда
Значение = "***";
КонецЕсли;
+144 -17
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", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -823,11 +948,12 @@
Функция ОформитьОтвет(Знач Ответ, Знач ОжидаютсяДвоичные = Ложь)
Статус = Ответ.КодСостояния;
Заголовки = Ответ.Заголовки;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеТела = Новый Структура;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ТелоОтвета = СокрЛП(ТелоОтвета);
@@ -842,9 +968,10 @@
КонецЕсли;
ДанныеОтвета = Новый Соответствие;
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("status" , Статус);
ДанныеОтвета.Вставить("response", ДанныеТела);
ДанныеОтвета.Вставить("headers" , Заголовки);
Иначе
ДанныеОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
@@ -256,6 +256,7 @@
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеСчетчиками" , "Управление счетчиками" , Метрика);
НовыйТест(ТаблицаТестов, "AWS_ОбщиеМетоды" , "Общие методы" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
Возврат ТаблицаТестов;
@@ -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Успех(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -16682,7 +16682,6 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("s3", "ПолучитьШифрованиеБакета", Опции);
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
КонецПроцедуры