1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-26 05:37:27 +02:00

B24: Загрузка файла в каталог

This commit is contained in:
Anton 2024-07-01 20:43:33 +03:00
parent e1e548b60f
commit 6a1df8917e
8 changed files with 4057 additions and 3824 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1217,6 +1217,59 @@
КонецФункции
// Загрузить файл в каталог
// Загружает переданный файл в каталог
//
// Параметры:
// URL - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
// Наименование - Строка - Наименование файла с расширением для сохранения - title
// Файл - Строка, ДвоичныеДанные - Файл для загрузки - file
// IDКаталога - Строка - Идентификатор каталога для загрузки - folderid
// Токен - Строка - Токен авторизации, если используется не вебхук - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ЗагрузитьФайлВКаталог(Знач URL
, Знач Наименование
, Знач Файл
, Знач IDКаталога
, Знач Токен = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.uploadFile");
OPI_Инструменты.ДобавитьПоле("id", IDКаталога, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Результат = Ответ["result"];
Если ЗначениеЗаполнено(Результат) Тогда
ИмяПоля = Результат["field"];
URLЗагрузки = Результат["uploadUrl"];
Если ЗначениеЗаполнено(ИмяПоля) И ЗначениеЗаполнено(URLЗагрузки) Тогда
ИмяПоля = СокрЛП(ИмяПоля);
URLЗагрузки = СокрЛП(URLЗагрузки);
ИмяФайла = ИмяПоля + "|" + Наименование;
СоответствиеФайла = Новый Соответствие;
СоответствиеФайла.Вставить(ИмяФайла, Файл);
Ответ = OPI_Инструменты.PostMultipart(URLЗагрузки, , СоответствиеФайла);
КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции
// Получить структуру фильтра каталога
// Возвращает структуру полей для фильтрации дочерних элементов каталога
//

View File

@ -1,21 +1,21 @@
<package-def>
<module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/>
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
<module name="OPI_GoogleCalendar" file="core/Modules/OPI_GoogleCalendar.os"/>
<module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/>
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
<module name="OPI_Dropbox" file="core/Modules/OPI_Dropbox.os"/>
<module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/>
<module name="OPI_VK" file="core/Modules/OPI_VK.os"/>
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
<module name="OPI_Airtable" file="core/Modules/OPI_Airtable.os"/>
<module name="OPI_Bitrix24" file="core/Modules/OPI_Bitrix24.os"/>
<module name="OPI_Dropbox" file="core/Modules/OPI_Dropbox.os"/>
<module name="OPI_GoogleCalendar" file="core/Modules/OPI_GoogleCalendar.os"/>
<module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/>
<module name="OPI_GoogleSheets" file="core/Modules/OPI_GoogleSheets.os"/>
<module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/>
<module name="OPI_GoogleWorkspace" file="core/Modules/OPI_GoogleWorkspace.os"/>
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
<module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/>
<module name="OPI_Инструменты" file="tools/Modules/internal/Modules/OPI_Инструменты.os"/>
<module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/>
<module name="OPI_VK" file="core/Modules/OPI_VK.os"/>
<module name="OPI_YandexDisk" file="core/Modules/OPI_YandexDisk.os"/>
<module name="OPI_YandexID" file="core/Modules/OPI_YandexID.os"/>
<module name="OPI_GoogleWorkspace" file="core/Modules/OPI_GoogleWorkspace.os"/>
<module name="OPI_Инструменты" file="tools/Modules/internal/Modules/OPI_Инструменты.os"/>
<module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/>
<module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/>
<module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/>
</package-def>

View File

@ -2934,13 +2934,14 @@
Bitrix24_ПолучитьВнешнююСсылкуКаталога(ПараметрыТеста);
Bitrix24_СоздатьПодкаталог(ПараметрыТеста);
Bitrix24_КопироватьКаталог(ПараметрыТеста);
Bitrix24_ЗагрузитьФайлВКаталог(ПараметрыТеста);
Bitrix24_ПолучитьСтруктуруФильтраКаталога(ПараметрыТеста);
Bitrix24_ПолучитьДочерниеЭлементыКаталога(ПараметрыТеста);
Bitrix24_ПереместитьКаталог(ПараметрыТеста);
Bitrix24_ПоместитьКаталогВКорзину(ПараметрыТеста);
Bitrix24_ВосстановитьКаталог(ПараметрыТеста);
Bitrix24_УдалитьКаталог(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
@ -7245,6 +7246,43 @@
КонецПроцедуры
Процедура Bitrix24_ЗагрузитьФайлВКаталог(ПараметрыФункции)
Наименование2 = "Картинка2.jpg";
Наименование = "Картинка1.jpg";
Картинка2 = ПараметрыФункции["Picture"]; // Локальный путь, URL или Двоичные данные
Картинка = ПараметрыФункции["Picture2"]; // Локальный путь, URL или Двоичные данные
IDПриемника = ПараметрыФункции["Bitrix24_FolderID"];
URL = ПараметрыФункции["Bitrix24_URL"];
Результат = OPI_Bitrix24.ЗагрузитьФайлВКаталог(URL, Наименование2, Картинка2, IDПриемника);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлВКаталог (хук)", "Bitrix24");
Проверка_БитриксФайл(Результат); // SKIP
IDФайла = Результат["result"]["ID"]; // SKIP
OPI_Bitrix24.УдалитьФайл(URL, IDФайла); // SKIP
URL = ПараметрыФункции["Bitrix24_Domain"];
Токен = ПараметрыФункции["Bitrix24_Token"];
Результат = OPI_Bitrix24.ЗагрузитьФайлВКаталог(URL, Наименование, Картинка, IDПриемника, Токен);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлВКаталог", "Bitrix24");
Проверка_БитриксФайл(Результат);
IDФайла = Результат["result"]["ID"];
Результат = OPI_Bitrix24.УдалитьФайл(URL, IDФайла, Токен);
КонецПроцедуры
#КонецОбласти
#Область YandexDisk

View File

@ -817,6 +817,33 @@
КонецФункции
Функция РазобратьКлючФайла(Знач ДанныеФайла, Знач ТипКонтента)
ЗаменаТочки = "___";
ИмяФайла = СтрЗаменить(ДанныеФайла, ЗаменаТочки, ".");
МассивИмени = СтрРазделить(ИмяФайла, "|", Ложь);
Если МассивИмени.Количество() = 2 Тогда
ИмяПоля = МассивИмени[0];
ИмяФайла = МассивИмени[1];
Иначе
Если ТипКонтента = "image/jpeg" Тогда
ИмяПоля = "photo";
Иначе
ИмяПоля = Лев(ИмяФайла, СтрНайти(ИмяФайла, ".") - 1);
ИмяПоля = ?(ЗначениеЗаполнено(ИмяПоля), ИмяПоля, СтрЗаменить(ДанныеФайла,
ЗаменаТочки, "."));
КонецЕсли;
КонецЕсли;
СтруктураВозврата = Новый Структура("ИмяПоля,ИмяФайла", ИмяПоля, ИмяФайла);
Возврат СтруктураВозврата;
КонецФункции
Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
Коллекция = ТипЗнч(Параметры) = Тип("Структура")
@ -883,26 +910,19 @@
ТипКонтента = СокрЛП(ТипКонтента);
РазделительСтрок = Символы.ВК + Символы.ПС;
ЗаменаТочки = "___";
Для Каждого Файл Из Файлы Цикл
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
СтруктураИнформации = РазобратьКлючФайла(Файл.Ключ, ТипКонтента);
Если ТипКонтента = "image/jpeg" Тогда
ИмяФайлаОтправки = "photo";
Иначе
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
ЗаменаТочки, "."));
КонецЕсли;
ИмяПоля = СтруктураИнформации["ИмяПоля"];
ИмяФайла = СтруктураИнформации["ИмяФайла"];
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name="""
+ ИмяФайлаОтправки
+ ИмяПоля
+ """; filename="""
+ ПутьФайл
+ ИмяФайла
+ """");
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);

View File

@ -1217,6 +1217,59 @@
КонецФункции
// Загрузить файл в каталог
// Загружает переданный файл в каталог
//
// Параметры:
// URL - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
// Наименование - Строка - Наименование файла с расширением для сохранения - title
// Файл - Строка, ДвоичныеДанные - Файл для загрузки - file
// IDКаталога - Строка - Идентификатор каталога для загрузки - folderid
// Токен - Строка - Токен авторизации, если используется не вебхук - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ЗагрузитьФайлВКаталог(Знач URL
, Знач Наименование
, Знач Файл
, Знач IDКаталога
, Знач Токен = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.uploadFile");
OPI_Инструменты.ДобавитьПоле("id", IDКаталога, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Результат = Ответ["result"];
Если ЗначениеЗаполнено(Результат) Тогда
ИмяПоля = Результат["field"];
URLЗагрузки = Результат["uploadUrl"];
Если ЗначениеЗаполнено(ИмяПоля) И ЗначениеЗаполнено(URLЗагрузки) Тогда
ИмяПоля = СокрЛП(ИмяПоля);
URLЗагрузки = СокрЛП(URLЗагрузки);
ИмяФайла = ИмяПоля + "|" + Наименование;
СоответствиеФайла = Новый Соответствие;
СоответствиеФайла.Вставить(ИмяФайла, Файл);
Ответ = OPI_Инструменты.PostMultipart(URLЗагрузки, , СоответствиеФайла);
КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции
// Получить структуру фильтра каталога
// Возвращает структуру полей для фильтрации дочерних элементов каталога
//

View File

@ -817,6 +817,33 @@
КонецФункции
Функция РазобратьКлючФайла(Знач ДанныеФайла, Знач ТипКонтента)
ЗаменаТочки = "___";
ИмяФайла = СтрЗаменить(ДанныеФайла, ЗаменаТочки, ".");
МассивИмени = СтрРазделить(ИмяФайла, "|", Ложь);
Если МассивИмени.Количество() = 2 Тогда
ИмяПоля = МассивИмени[0];
ИмяФайла = МассивИмени[1];
Иначе
Если ТипКонтента = "image/jpeg" Тогда
ИмяПоля = "photo";
Иначе
ИмяПоля = Лев(ИмяФайла, СтрНайти(ИмяФайла, ".") - 1);
ИмяПоля = ?(ЗначениеЗаполнено(ИмяПоля), ИмяПоля, СтрЗаменить(ДанныеФайла,
ЗаменаТочки, "."));
КонецЕсли;
КонецЕсли;
СтруктураВозврата = Новый Структура("ИмяПоля,ИмяФайла", ИмяПоля, ИмяФайла);
Возврат СтруктураВозврата;
КонецФункции
Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
Коллекция = ТипЗнч(Параметры) = Тип("Структура")
@ -883,26 +910,19 @@
ТипКонтента = СокрЛП(ТипКонтента);
РазделительСтрок = Символы.ВК + Символы.ПС;
ЗаменаТочки = "___";
Для Каждого Файл Из Файлы Цикл
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
СтруктураИнформации = РазобратьКлючФайла(Файл.Ключ, ТипКонтента);
Если ТипКонтента = "image/jpeg" Тогда
ИмяФайлаОтправки = "photo";
Иначе
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
ЗаменаТочки, "."));
КонецЕсли;
ИмяПоля = СтруктураИнформации["ИмяПоля"];
ИмяФайла = СтруктураИнформации["ИмяФайла"];
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name="""
+ ИмяФайлаОтправки
+ ИмяПоля
+ """; filename="""
+ ПутьФайл
+ ИмяФайла
+ """");
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);

View File

@ -2934,13 +2934,14 @@
Bitrix24_ПолучитьВнешнююСсылкуКаталога(ПараметрыТеста);
Bitrix24_СоздатьПодкаталог(ПараметрыТеста);
Bitrix24_КопироватьКаталог(ПараметрыТеста);
Bitrix24_ЗагрузитьФайлВКаталог(ПараметрыТеста);
Bitrix24_ПолучитьСтруктуруФильтраКаталога(ПараметрыТеста);
Bitrix24_ПолучитьДочерниеЭлементыКаталога(ПараметрыТеста);
Bitrix24_ПереместитьКаталог(ПараметрыТеста);
Bitrix24_ПоместитьКаталогВКорзину(ПараметрыТеста);
Bitrix24_ВосстановитьКаталог(ПараметрыТеста);
Bitrix24_УдалитьКаталог(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
@ -7245,6 +7246,43 @@
КонецПроцедуры
Процедура Bitrix24_ЗагрузитьФайлВКаталог(ПараметрыФункции)
Наименование2 = "Картинка2.jpg";
Наименование = "Картинка1.jpg";
Картинка2 = ПараметрыФункции["Picture"]; // Локальный путь, URL или Двоичные данные
Картинка = ПараметрыФункции["Picture2"]; // Локальный путь, URL или Двоичные данные
IDПриемника = ПараметрыФункции["Bitrix24_FolderID"];
URL = ПараметрыФункции["Bitrix24_URL"];
Результат = OPI_Bitrix24.ЗагрузитьФайлВКаталог(URL, Наименование2, Картинка2, IDПриемника);
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлВКаталог (хук)", "Bitrix24");
Проверка_БитриксФайл(Результат); // SKIP
IDФайла = Результат["result"]["ID"]; // SKIP
OPI_Bitrix24.УдалитьФайл(URL, IDФайла); // SKIP
URL = ПараметрыФункции["Bitrix24_Domain"];
Токен = ПараметрыФункции["Bitrix24_Token"];
Результат = OPI_Bitrix24.ЗагрузитьФайлВКаталог(URL, Наименование, Картинка, IDПриемника, Токен);
// END
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлВКаталог", "Bitrix24");
Проверка_БитриксФайл(Результат);
IDФайла = Результат["result"]["ID"];
Результат = OPI_Bitrix24.УдалитьФайл(URL, IDФайла, Токен);
КонецПроцедуры
#КонецОбласти
#Область YandexDisk