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

S3: Подписание URL для прямого скачивания

This commit is contained in:
Anton Titovets 2024-11-28 15:50:29 +03:00
parent c74dd55a72
commit 79f3584b0d
28 changed files with 247 additions and 64 deletions

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Airtable.os
// OneScript: ./OInt/core/Modules/OPI_Airtable.os
// Lib: Airtable
// CLI: airtable

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Bitrix24.os
// OneScript: ./OInt/core/Modules/OPI_Bitrix24.os
// Lib: Bitrix24
// CLI: bitrix24

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_CDEK.os
// OneScript: ./OInt/core/Modules/OPI_CDEK.os
// Lib: CDEK
// CLI: cdek

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Dropbox.os
// OneScript: ./OInt/core/Modules/OPI_Dropbox.os
// Lib: Dropbox
// CLI: dropbox

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleCalendar.os
// OneScript: ./OInt/core/Modules/OPI_GoogleCalendar.os
// Lib: Google Calendar
// CLI: gcalendar

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleDrive.os
// OneScript: ./OInt/core/Modules/OPI_GoogleDrive.os
// Lib: Google Drive
// CLI: gdrive

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleSheets.os
// OneScript: ./OInt/core/Modules/OPI_GoogleSheets.os
// Lib: Google Sheets
// CLI: gsheets

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_GoogleWorkspace.os
// OneScript: ./OInt/core/Modules/OPI_GoogleWorkspace.os
// Lib: Google Workspace
// CLI: google

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Neocities.os
// OneScript: ./OInt/core/Modules/OPI_Neocities.os
// Lib: Neocities
// CLI: neocities

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Notion.os
// OneScript: ./OInt/core/Modules/OPI_Notion.os
// Lib: Notion
// CLI: notion

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Ozon.os
// OneScript: ./OInt/core/Modules/OPI_Ozon.os
// Lib: Ozon
// CLI: ozon

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_S3.os
// OneScript: ./OInt/core/Modules/OPI_S3.os
// Lib: S3
// CLI: s3
@ -1182,20 +1182,27 @@
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
// Строка - URL для получения объекта
Функция ПолучитьСсылкуСкачиванияОбъекта(Знач Наименование
, Знач Бакет
, Знач ОсновныеДанные
, Знач ВремяЖизни = 3600
, Знач Заголовки = Неопределено)
, Знач Заголовки = Неопределено) Экспорт
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
ЗаполнитьURLОбъекта(ОсновныеДанные_, Наименование, Бакет, Версия);
ПроверитьОсновныеДанные(ОсновныеДанные_);
ЗаполнитьURLОбъекта(ОсновныеДанные_, Наименование, Бакет);
Подпись = СоздатьПодписьURL(ОсновныеДанные_, Наименование, "GET", ВремяЖизни, Заголовки);
URL = ОсновныеДанные_["URL"] + Подпись;
Возврат URL;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@ -1204,28 +1211,116 @@
Функция СоздатьЗаголовокАвторизации(Знач СтруктураДанных, Знач Запрос, Знач Соединение, Знач Метод)
AccessKey = СтруктураДанных["AccessKey"];
SecretKey = СтруктураДанных["SecretKey"];
Region = СтруктураДанных["Region"];
Service = СтруктураДанных["Service"];
AccessKey = СтруктураДанных["AccessKey"];
ТекущаяДата = ТекущаяУниверсальнаяДата();
Запрос.Заголовки.Вставить("x-amz-date", OPI_Инструменты.ВременнаяМеткаISO(ТекущаяДата));
Запрос.Заголовки.Вставить("Host" , Соединение.Сервер);
ОсновныеЧасти = ПолучитьОсновныеСоставляющиеПодписи(СтруктураДанных, Запрос, Соединение, Метод, ТекущаяДата);
Скоуп = ОсновныеЧасти["Скоуп"];
Сигнатура = ОсновныеЧасти["Сигнатура"];
КлючиЗаголовков = ОсновныеЧасти["КлючиЗаголовков"];
ЗаголовокАвторизации = СформироватьЗаголовокАвторизации(AccessKey, Скоуп, Сигнатура, КлючиЗаголовков);
Возврат ЗаголовокАвторизации;
КонецФункции
Функция СоздатьПодписьURL(Знач СтруктураДанных, Знач Наименование, Знач Метод, Знач ВремяЖизни, Знач Заголовки)
AccessKey = СтруктураДанных["AccessKey"];
SecretKey = СтруктураДанных["SecretKey"];
Region = СтруктураДанных["Region"];
Service = СтруктураДанных["Service"];
URL = СтруктураДанных["URL"];
РазбитыйURL = OPI_Инструменты.РазбитьURL(URL);
Сервер = РазбитыйURL["Сервер"];
Адрес = РазбитыйURL["Адрес"];
ДопЗаголовки = Новый Структура("Host", Сервер);
ДобавитьДополнительныеЗаголовки(Заголовки, ДопЗаголовки);
ТекущаяДата = ТекущаяУниверсальнаяДата();
КлючПодписи = ПолучитьКлючПодписи(SecretKey, Region, Service, ТекущаяДата);
Скоуп = СоздатьСкоуп(Region, Service, ТекущаяДата);
ВременнаяМетка = OPI_Инструменты.ВременнаяМеткаISO(ТекущаяДата);
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков(Заголовки);
Основа = КодироватьСтроку(AccessKey + "/" + Скоуп, СпособКодированияСтроки.КодировкаURL);
СтрокаЗаголовков = ПолучитьСтрокуЗаголовков(Заголовки);
СтрокаХеша = "UNSIGNED-PAYLOAD";
ПараметрыURL = Новый ТаблицаЗначений;
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Algorithm" , "AWS4-HMAC-SHA256");
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Credential" , Основа);
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Date" , ВременнаяМетка);
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Expires" , ВремяЖизни);
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-SignedHeaders", КлючиЗаголовков);
ПараметрыСтрокой = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
ПараметрыСтрокой = Прав(ПараметрыСтрокой, СтрДлина(ПараметрыСтрокой) - 1);
ШаблонЗапроса = "";
Для Н = 1 По 6 Цикл
ШаблонЗапроса = ШаблонЗапроса + "%" + Строка(Н) + ?(Н = 6, "", Символы.ПС);
КонецЦикла;
КаноническийЗапрос = СтрШаблон(ШаблонЗапроса
, Метод
, Адрес
, ПараметрыСтрокой
, СтрокаЗаголовков
, КлючиЗаголовков
, СтрокаХеша);
СтрокаДляПодписи = СоздатьСтрокуПодписи(КаноническийЗапрос, Скоуп, ТекущаяДата);
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Signature", Сигнатура);
ПодписьURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Возврат ПодписьURL;
КонецФункции
Функция ПолучитьОсновныеСоставляющиеПодписи(Знач СтруктураДанных
, Знач Запрос
, Знач Соединение
, Знач Метод
, Знач ТекущаяДата)
SecretKey = СтруктураДанных["SecretKey"];
Region = СтруктураДанных["Region"];
Service = СтруктураДанных["Service"];
КлючПодписи = ПолучитьКлючПодписи(SecretKey, Region, Service, ТекущаяДата);
КаноническийЗапрос = СоздатьКаноническийЗапрос(Запрос, Соединение, Метод);
Скоуп = СоздатьСкоуп(Region, Service, ТекущаяДата);
СтрокаДляПодписи = СоздатьСтрокуПодписи(КаноническийЗапрос, Скоуп, ТекущаяДата);
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков(Запрос.Заголовки);
СтруктураЧастей = Новый Структура;
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков(Запрос);
ЗаголовокАвторизации = СформироватьЗаголовокАвторизации(AccessKey, Скоуп, Сигнатура, КлючиЗаголовков);
Возврат ЗаголовокАвторизации;
СтруктураЧастей.Вставить("Скоуп" , Скоуп);
СтруктураЧастей.Вставить("Сигнатура" , Сигнатура);
СтруктураЧастей.Вставить("КлючиЗаголовков", КлючиЗаголовков);
Возврат СтруктураЧастей;
КонецФункции
@ -1249,11 +1344,11 @@
Функция СоздатьКаноническийЗапрос(Знач Запрос, Знач Соединение, Знач Метод)
ТелоЗапроса = OPI_Инструменты.ПолучитьТелоЗапроса(Запрос);
ХешСумма = OPI_Криптография.Хеш(ТелоЗапроса, ХешФункция.SHA256);
Запрос.Заголовки.Вставить("x-amz-content-sha256", нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма)));
ШаблонЗапроса = "";
ТелоЗапроса = OPI_Инструменты.ПолучитьТелоЗапроса(Запрос);
ХешСумма = OPI_Криптография.Хеш(ТелоЗапроса, ХешФункция.SHA256);
Запрос.Заголовки.Вставить("x-amz-content-sha256", нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма)));
Для Н = 1 По 6 Цикл
@ -1264,8 +1359,8 @@
Метод = вРег(Метод);
СтрокаURI = ПолучитьСтрокуURI(Запрос);
СтрокаПараметров = ПолучитьСтрокуПараметров(Запрос);
СтрокаЗаголовков = ПолучитьСтрокуЗаголовков(Запрос);
СтрокаКлючей = ПолучитьСтрокуКлючейЗаголовков(Запрос);
СтрокаЗаголовков = ПолучитьСтрокуЗаголовков(Запрос.Заголовки);
СтрокаКлючей = ПолучитьСтрокуКлючейЗаголовков(Запрос.Заголовки);
СтрокаХэша = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма));
@ -1356,10 +1451,9 @@
КонецФункции
Функция ПолучитьСтрокуЗаголовков(Знач Запрос)
Функция ПолучитьСтрокуЗаголовков(Знач Заголовки)
СписокЗаголовков = Новый СписокЗначений;
Заголовки = Запрос.Заголовки;
Для Каждого Заголовок Из Заголовки Цикл
@ -1384,10 +1478,9 @@
КонецФункции
Функция ПолучитьСтрокуКлючейЗаголовков(Знач Запрос)
Функция ПолучитьСтрокуКлючейЗаголовков(Знач Заголовки)
СписокЗаголовков = Новый СписокЗначений;
Заголовки = Запрос.Заголовки;
Для Каждого Заголовок Из Заголовки Цикл

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Slack.os
// OneScript: ./OInt/core/Modules/OPI_Slack.os
// Lib: Slack
// CLI: slack

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Telegram.os
// OneScript: ./OInt/core/Modules/OPI_Telegram.os
// Lib: Telegram
// CLI: telegram

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Twitter.os
// OneScript: ./OInt/core/Modules/OPI_Twitter.os
// Lib: Twitter
// CLI: twitter

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_VK.os
// OneScript: ./OInt/core/Modules/OPI_VK.os
// Lib: VK
// CLI: vk

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_VKTeams.os
// OneScript: ./OInt/core/Modules/OPI_VKTeams.os
// Lib: VKTeams
// CLI: vkteams

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_Viber.os
// OneScript: ./OInt/core/Modules/OPI_Viber.os
// Lib: Viber
// CLI: viber

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_YandexDisk.os
// OneScript: ./OInt/core/Modules/OPI_YandexDisk.os
// Lib: Yandex Disk
// CLI: yadisk

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_YandexID.os
// OneScript: ./OInt/core/Modules/OPI_YandexID.os
// Lib: Yandex ID
// CLI: yandex

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_YandexMarket.os
// OneScript: ./OInt/core/Modules/OPI_YandexMarket.os
// Lib: Yandex Market
// CLI: yamarket

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_YandexMetrika.os
// OneScript: ./OInt/core/Modules/OPI_YandexMetrika.os
// Lib: Yandex Metrika
// CLI: metrika

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
// MIT License
@ -36,6 +36,7 @@
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
#Область СлужебныйПрограммныйИнтерфейс
#Область HTTPМетоды
@ -190,20 +191,24 @@
КонецФункции
Функция СоздатьСоединение(Знач Сервер, Знач Защищенное = Истина, Знач Пользователь = "", Знач Пароль = "") Экспорт
Функция СоздатьСоединение(Знач Сервер, Знач Защищенное = Истина, Знач Пользователь = "", Знач Пароль = "", Знач Порт = "") Экспорт
Если Не ЗначениеЗаполнено(Порт) Тогда
Порт = ?(Защищенное, 443, 80);
КонецЕсли;
Если Защищенное Тогда
Если ЭтоOneScript() Тогда
Соединение = Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000);
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 3000);
Иначе
SSL = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000, SSL);
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 3000, SSL);
КонецЕсли;
Иначе
Соединение = Новый HTTPСоединение(Сервер, 80, Пользователь, Пароль, , 3000, SSL);
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 3000);
КонецЕсли;
@ -227,8 +232,9 @@
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Защищенное = СтруктураURL["Защищенное"];
Порт = СтруктураURL["Порт"];
Соединение = СоздатьСоединение(Сервер, Защищенное);
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
Запрос.АдресРесурса = Адрес;
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета, ПолныйОтвет);
@ -313,7 +319,7 @@
СтрокаПараметров = ?(Начало, "?", "&");
Для Каждого Параметр Из Параметры Цикл
ТекущееЗначение = Параметр.Значение;
ТекущийКлюч = Параметр.Ключ;
@ -344,7 +350,6 @@
URL = СтрЗаменить(URL, "https://", "");
URL = СтрЗаменить(URL, "http://" , "");
URL = СтрЗаменить(URL, ":443" , "");
Если СтрНайти(URL, "/") = 0 Тогда
Адрес = "";
@ -353,6 +358,20 @@
Адрес = Прав(URL, СтрДлина(URL) - СтрНайти(URL, "/", НаправлениеПоиска.СНачала) + 1);
Сервер = Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1);
КонецЕсли;
Если СтрНайти(Сервер, ":") <> 0 Тогда
СерверПорт = СтрРазделить(Сервер, ":");
Сервер = СерверПорт[0];
Порт = СерверПорт[1];
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
Иначе
Порт = ?(ЗащищенноеСоединение, 443, 80);
КонецЕсли;
Если ЭтоOneScript() И ЗащищенноеСоединение Тогда
Сервер = "https://" + Сервер;
@ -362,6 +381,7 @@
СтруктураВозврата.Вставить("Сервер" , Сервер);
СтруктураВозврата.Вставить("Адрес" , Адрес);
СтруктураВозврата.Вставить("Защищенное", ЗащищенноеСоединение);
СтруктураВозврата.Вставить("Порт" , Порт);
Возврат СтруктураВозврата;
@ -935,6 +955,41 @@
КонецПроцедуры
Процедура ДобавитьКлючЗначение(Таблица, Знач Ключ, Знач Значение) Экспорт
ЕстьКлюч = Ложь;
ЕстьЗначение = Ложь;
Для Каждого Колонка Из Таблица.Колонки Цикл
Если Колонка.Имя = "Ключ" Тогда
ЕстьКлюч = Истина;
ИначеЕсли Колонка.Имя = "Значение" Тогда
ЕстьЗначение = Истина;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЕстьКлюч Тогда
Таблица.Колонки.Добавить("Ключ");
КонецЕсли;
Если Не ЕстьЗначение Тогда
Таблица.Колонки.Добавить("Значение");
КонецЕсли;
НовоеЗначение = Таблица.Добавить();
НовоеЗначение.Ключ = Ключ;
НовоеЗначение.Значение = Значение;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -952,9 +1007,10 @@
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Защищенное = СтруктураURL["Защищенное"];
Порт = СтруктураURL["Порт"];
Запрос = СоздатьЗапросСТелом(Адрес, Параметры, ДопЗаголовки, JSON);
Соединение = СоздатьСоединение(Сервер, Защищенное);
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета, ПолныйОтвет);
Возврат Ответ;
@ -968,9 +1024,10 @@
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Защищенное = СтруктураURL["Защищенное"];
Порт = СтруктураURL["Порт"];
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
Соединение = СоздатьСоединение(Сервер, Защищенное);
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
Если Не Данные.Размер() = 0 Тогда
Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
@ -993,9 +1050,10 @@
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
Защищенное = СтруктураURL["Защищенное"];
Порт = СтруктураURL["Порт"];
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
Соединение = СоздатьСоединение(Сервер, Защищенное);
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
@ -1018,11 +1076,12 @@
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Защищенное = СтруктураURL["Защищенное"];
Порт = СтруктураURL["Порт"];
ТелоЗапроса = ПолучитьИмяВременногоФайла();
Запрос = СоздатьЗапросМультипарт(Адрес, Параметры, Файлы, ДопЗаголовки, ТелоЗапроса, ТипКонтента);
Соединение = СоздатьСоединение(Сервер, Защищенное);
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
Запрос = Неопределено;
@ -1040,11 +1099,12 @@
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Защищенное = СтруктураURL["Защищенное"];
Порт = СтруктураURL["Порт"];
ТелоЗапроса = ПолучитьИмяВременногоФайла();
Запрос = СоздатьЗапросМультипартРелэйтед(Адрес, Файлы, JSON, ДопЗаголовки, ТелоЗапроса);
Соединение = СоздатьСоединение(Сервер, Защищенное);
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
// MIT License

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// MIT License

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// MIT License

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@ -2162,6 +2162,7 @@
S3_ПолучитьСписокОбъектов(ПараметрыТеста);
S3_ПолучитьСписокВерсийОбъектов(ПараметрыТеста);
S3_ПолучитьОбъект(ПараметрыТеста);
S3_ПолучитьСсылкуСкачиванияОбъекта(ПараметрыТеста);
S3_УдалитьОбъект(ПараметрыТеста);
S3_УдалитьБакет(ПараметрыТеста);
@ -15567,6 +15568,35 @@
КонецПроцедуры
Процедура S3_ПолучитьСсылкуСкачиванияОбъекта(ПараметрыФункции)
Картинка = ПараметрыФункции["Picture"]; // SKIP
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // SKIP
НеобходимыйРазмер = Картинка.Размер(); // SKIP
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "picture.jpg";
Бакет = "opi-gpbucket3";
Результат = OPI_S3.ПолучитьСсылкуСкачиванияОбъекта(Наименование, Бакет, ОсновныеДанные, 7200);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСсылкуСкачиванияОбъекта", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Строка(Результат);
Результат = OPI_Инструменты.Get(Результат);
OPI_ПолучениеДанныхТестов.Проверка_ДвоичныеДанные(Результат, НеобходимыйРазмер);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_ТестыCLI.os
// OneScript: ./OInt/tests/Modules/internal/OPI_ТестыCLI.os
// MIT License