Начало Dropbox

This commit is contained in:
Anton
2024-05-14 19:52:36 +03:00
parent 9dd99145b6
commit 7dbd85013b
7 changed files with 173 additions and 1 deletions
@@ -623,7 +623,7 @@
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
Функция ПолучитьЗаголовокАвторизации(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
@@ -0,0 +1,105 @@
// Расположение OS: ./OInt/core/Modules/OPI_Dropbox.os
// Библиотека: Dropbox
// Команда CLI: dropbox
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область РаботаСФайлами
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Режим = ?(Перезаписывать, "overwrite", "add");
Размер = Файл.Размер();
Граница = 50000000;
Если Размер > Граница Тогда
Ответ = ЗагрузитьБольшойФайл(Токен, Файл, Путь, Режим);
Иначе
Ответ = ЗагрузитьМалыйФайл(Токен, Файл, Путь, Режим);
КонецЕсли;
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовкиЗапроса(Знач Токен, Знач Параметры = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
Если ЗначениеЗаполнено(Параметры) Тогда
JSON = OPI_Инструменты.JSONСтрокой(Параметры, "Нет");
JSON = СтрЗаменить(JSON, Символы.ВК + Символы.ПС, "");
Заголовки.Вставить("Dropbox-API-Arg", JSON);
КонецЕсли;
Возврат Заголовки;
КонецФункции
Функция ЗагрузитьБольшойФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
Возврат "";
КонецФункции
Функция ЗагрузитьМалыйФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
URL = "https://content.dropboxapi.com/2/files/upload";
Параметры = Новый Структура("autorename,mode,mute,path,strict_conflict", Ложь, Режим, Ложь, Путь, Ложь);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
Ответ = OPI_Инструменты.PostBinary(URL, Файл, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66ce7792-41e5-47e4-bfad-2dcff1c96287">
<name>OPI_Dropbox</name>
<synonym>
<key>ru</key>
<value>Drop box</value>
</synonym>
<synonym>
<key></key>
<value>OPI dropbox</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -85,6 +85,12 @@
КонецФункции
Функция PostBinary(Знач URL, Знач Тело, Знач ДопЗаголовки, Знач ПолныйОтвет = Ложь) Экспорт
Возврат ВыполнитьЗапросСДвоичнымиДанными(URL, "POST", Тело, ДопЗаголовки, ПолныйОтвет);
КонецФункции
#КонецОбласти
#Область ЗапросыMultipart
@@ -490,6 +496,33 @@
КонецФункции
Функция ВыполнитьЗапросСДвоичнымиДанными(Знач URL, Знач Вид, Знач Данные, Знач ДопЗаголовки, Знач ПолныйОтвет)
СтруктураURL = РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, "application/octet-stream");
Соединение = СоздатьСоединение(Сервер);
Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
Если ЭтоПереадресация(Ответ) Тогда
Ответ = ВыполнитьЗапросСДвоичнымиДанными(Ответ.Заголовки["Location"]
, Вид
, Данные
, ДопЗаголовки
, ПолныйОтвет);
Иначе
ОбработатьОтвет(Ответ, ПолныйОтвет);
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция ВыполнитьЗапросБезТела(Знач URL
, Знач Вид
, Знач Параметры = ""
@@ -59,6 +59,7 @@
Разделы.Вставить("Notion" , СтандартныеЗависимости);
Разделы.Вставить("Slack" , СтандартныеЗависимости);
Разделы.Вставить("Airtable" , СтандартныеЗависимости);
Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
Возврат Разделы;
@@ -78,6 +79,7 @@
Слак = "Slack";
Таблицы = "GoogleSheets";
АирТ = "Airtable";
ДропБокс = "Dropbox";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -205,6 +207,8 @@
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
Возврат ТаблицаТестов;
@@ -3743,6 +3743,20 @@
#КонецОбласти
#Область Dropbox
Функция ДропБокс_ЗагрузитьФайл() Экспорт
Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Dropbox_Token");
Файл = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Document");
Путь = "/New/mydoc.docx";
Результат = OPI_Dropbox.ЗагрузитьФайл(Токен, Файл, Путь);
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецОбласти
+1
View File
@@ -64,6 +64,7 @@
<commonModules>CommonModule.OPI_GoogleSheets</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_Airtable</commonModules>
<commonModules>CommonModule.OPI_Dropbox</commonModules>
<commonModules>CommonModule.OPI_Тесты</commonModules>
<commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>
</mdclass:Configuration>