diff --git a/OInt/core/Modules/OPI_GoogleDrive.os b/OInt/core/Modules/OPI_GoogleDrive.os index 22c4346564..545dc810a2 100644 --- a/OInt/core/Modules/OPI_GoogleDrive.os +++ b/OInt/core/Modules/OPI_GoogleDrive.os @@ -174,12 +174,13 @@ // Получает файл по ID // // Параметры: -// Токен - Строка - Токен - token -// Идентификатор - Строка - Идентификатор файла - object +// Токен - Строка - Токен - token +// Идентификатор - Строка - Идентификатор файла - object +// ПутьСохранения - Строка - Путь сохранения файла - out // // Возвращаемое значение: -// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google -Функция СкачатьФайл(Знач Токен, Знач Идентификатор) Экспорт +// ДвоичныеДанные,Строка - двоичные данные или путь к файлу при указании параметра ПутьСохранения +Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); @@ -190,7 +191,7 @@ Параметры = Новый Соответствие; Параметры.Вставить("alt", "media"); - Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки); + Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения); Возврат Ответ; diff --git a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os index b365945b74..05cdd5f106 100644 --- a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os +++ b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os @@ -37,11 +37,11 @@ #Область ЗапросыБезТела -Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт +Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач ФайлОтвета = "") Экспорт Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки); КонецФункции -Функция Delete(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт +Функция Delete(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач ФайлОтвета = "") Экспорт Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки); КонецФункции @@ -49,16 +49,37 @@ #Область ЗапросыСТелом -Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина, Знач ПолныйОтвет = Ложь) Экспорт +Функция Post(Знач URL + , Знач Параметры = "" + , Знач ДопЗаголовки = "" + , Знач JSON = Истина + , Знач ПолныйОтвет = Ложь + , Знач ФайлОтвета = "") Экспорт + Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON, ПолныйОтвет); + КонецФункции -Функция Patch(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина, Знач ПолныйОтвет = Ложь) Экспорт +Функция Patch(Знач URL + , Знач Параметры = "" + , Знач ДопЗаголовки = "" + , Знач JSON = Истина + , Знач ПолныйОтвет = Ложь + , Знач ФайлОтвета = "") Экспорт + Возврат ВыполнитьЗапросСТелом(URL, "PATCH", Параметры, ДопЗаголовки, JSON, ПолныйОтвет); + КонецФункции -Функция Put(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина, Знач ПолныйОтвет = Ложь) Экспорт +Функция Put(Знач URL + , Знач Параметры = "" + , Знач ДопЗаголовки = "" + , Знач JSON = Истина + , Знач ПолныйОтвет = Ложь + , Знач ФайлОтвета = "") Экспорт + Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON, ПолныйОтвет); + КонецФункции #КонецОбласти @@ -69,7 +90,8 @@ , Знач Параметры , Знач Файлы = "" , Знач ТипКонтента = "image/jpeg" - , Знач ДопЗаголовки = "") Экспорт + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Экспорт Возврат ВыполнитьЗапросМультипарт(URL, "POST", Параметры, Файлы, ТипКонтента, ДопЗаголовки); @@ -79,18 +101,31 @@ , Знач Параметры , Знач Файлы = "" , Знач ТипКонтента = "image/jpeg" - , Знач ДопЗаголовки = "") Экспорт + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Экспорт Возврат ВыполнитьЗапросМультипарт(URL, "PUT", Параметры, Файлы, ТипКонтента, ДопЗаголовки); КонецФункции -Функция PostMultipartRelated(Знач URL, Знач JSON = "", Знач Файлы = "", Знач ДопЗаголовки = "") Экспорт +Функция PostMultipartRelated(Знач URL + , Знач JSON = "" + , Знач Файлы = "" + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Экспорт + Возврат ВыполнитьЗапросМультипартРелэйтед(URL, "POST", JSON, Файлы, ДопЗаголовки); + КонецФункции -Функция PatchMultipartRelated(Знач URL, Знач JSON = "", Знач Файлы = "", Знач ДопЗаголовки = "") Экспорт +Функция PatchMultipartRelated(Знач URL + , Знач JSON = "" + , Знач Файлы = "" + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Экспорт + Возврат ВыполнитьЗапросМультипартРелэйтед(URL, "PATCH", JSON, Файлы, ДопЗаголовки); + КонецФункции #КонецОбласти @@ -103,6 +138,13 @@ Возврат; КонецЕсли; + ФайлТела = Ответ.ПолучитьИмяФайлаТела(); + + Если Не ФайлТела = Неопределено Тогда + Ответ = ФайлТела; + Возврат; + КонецЕсли; + GZip = "gzip"; НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip @@ -334,7 +376,13 @@ #Область СлужебныеПроцедурыИФункции -Функция ВыполнитьЗапросСТелом(Знач URL, Знач Вид, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина, Знач ПолныйОтвет = Ложь) +Функция ВыполнитьЗапросСТелом(Знач URL + , Знач Вид + , Знач Параметры = "" + , Знач ДопЗаголовки = "" + , Знач JSON = Истина + , Знач ПолныйОтвет = Ложь + , Знач ФайлОтвета = "") Если Не ЗначениеЗаполнено(Параметры) Тогда Параметры = Новый Структура; @@ -350,10 +398,16 @@ УстановитьТелоЗапроса(Запрос, Параметры, JSON); - Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета); Если ЭтоПереадресация(Ответ) Тогда - Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, JSON); + Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"] + , Вид + , Параметры + , ДопЗаголовки + , JSON + , ПолныйОтвет + , ФайлОтвета); Иначе ОбработатьОтвет(Ответ, ПолныйОтвет); КонецЕсли; @@ -362,7 +416,11 @@ КонецФункции -Функция ВыполнитьЗапросБезТела(Знач URL, Знач Вид, Знач Параметры = "", Знач ДопЗаголовки = "") +Функция ВыполнитьЗапросБезТела(Знач URL + , Знач Вид + , Знач Параметры = "" + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Если Не ЗначениеЗаполнено(Параметры) Тогда Параметры = Новый Структура; @@ -374,10 +432,10 @@ Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки); Соединение = СоздатьСоединение(Сервер); - Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета); Если ЭтоПереадресация(Ответ) Тогда - Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки); + Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, ФайлОтвета); Иначе ОбработатьОтвет(Ответ); КонецЕсли; @@ -391,7 +449,8 @@ , Знач Параметры , Знач Файлы = "" , Знач ТипКонтента = "image/jpeg" - , Знач ДопЗаголовки = "") + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Если Не ЗначениеЗаполнено(Параметры) Тогда Параметры = Новый Структура; @@ -414,7 +473,13 @@ Соединение = СоздатьСоединение(Сервер); ТелоЗапроса = ПолучитьИмяВременногоФайла(); - ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", Ложь, "", Ложь); + ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса + , КодировкаТекста.UTF8 + , ПорядокБайтов.LittleEndian + , "" + , Ложь + , "" + , Ложь); ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры); ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы); @@ -424,7 +489,7 @@ Запрос.УстановитьИмяФайлаТела(ТелоЗапроса); - Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета); ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка; Если ЭтоПереадресация Тогда @@ -433,7 +498,8 @@ , Параметры , Файлы , ТипКонтента - , ДопЗаголовки); + , ДопЗаголовки + , ФайлОтвета); Иначе ОбработатьОтвет(Ответ); КонецЕсли; @@ -446,7 +512,12 @@ КонецФункции -Функция ВыполнитьЗапросМультипартРелэйтед(URL, Вид, JSON = "", Файлы = "", ДопЗаголовки = "") +Функция ВыполнитьЗапросМультипартРелэйтед(Знач URL + , Знач Вид + , Знач JSON = "" + , Знач Файлы = "" + , Знач ДопЗаголовки = "" + , Знач ФайлОтвета = "") Переадресация = 300; Ошибка = 400; @@ -461,7 +532,13 @@ Соединение = СоздатьСоединение(Сервер); ТелоЗапроса = ПолучитьИмяВременногоФайла(); - ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", Ложь, "", Ложь); + ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса + , КодировкаТекста.UTF8 + , ПорядокБайтов.LittleEndian + , "" + , Ложь + , "" + , Ложь); ЗаписатьJSONМультипарт(ЗаписьТекста, Boundary, JSON); ЗаписатьФайлыРелэйтед(ЗаписьТекста, Boundary, Файлы); @@ -473,11 +550,16 @@ Запрос.УстановитьИмяФайлаТела(ТелоЗапроса); - Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета); ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка; Если ЭтоПереадресация Тогда - Ответ = ВыполнитьЗапросМультипартРелэйтед(Ответ.Заголовки["Location"], "POST", JSON, Файлы, ДопЗаголовки); + Ответ = ВыполнитьЗапросМультипартРелэйтед(Ответ.Заголовки["Location"] + , Вид + , JSON + , Файлы + , ДопЗаголовки + , ФайлОтвета); Иначе ОбработатьОтвет(Ответ); КонецЕсли;