Имя: Пароль:
1C
 
Создание папки на Google Drive
0 l4kom
 
20.11.23
10:13
Здравствуйте. прошу помощи. необходимо создавать из 1с папку на google drive. проблем с созданием файлов, обновлением не возникает. но создать папку не получается.
код:

&НаСервере
Процедура СоздатьПапкуНаСервере()
	
	Токен = УчетнаяЗапись.Access_token;
	ИдРодителя = Папка.Родитель.Ид;
	
	
	Свойства = Новый Соответствие();
	Свойства.Вставить("parents", ИдРодителя);
	Свойства.Вставить("name", Папка.Наименование);
	
	ТипДанныхИмпорта = "application/vnd.google-apps.folder";
	Свойства.Вставить("mimeType", ТипДанныхИмпорта);
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Свойства);
	СтрокаJSON = ЗаписьJSON.Закрыть();
	
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
	ДвоичныеДанныеJSON = СоздатьСообщение_Текст(СтрокаJSON);
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	ЗаписьДанных.ЗаписатьСтроку("--"+boundary);
	ЗаписьДанных.Записать(ДвоичныеДанныеJSON);
	ЗаписьДанных.ЗаписатьСтроку("--"+boundary);
	//ЗаписьДанных.ЗаписатьСтроку("--"+boundary+"--");
	
	ЗаписьДанных.Закрыть();
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	ЗаписьДанных.ЗаписатьСтроку("--"+boundary);
	ЗаписьДанных.Закрыть();
	ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
	
	Заголовки  = Новый Соответствие;
	Заголовки.Вставить("Authorization", "Bearer " + Токен);
	Заголовки.Вставить("Content-Type", 	"Multipart/Related; boundary=" + boundary);
	Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
	
	ПараметрыHTTP = "&fields=name,id,mimeType,parents,size,webContentLink,webViewLink,iconLink,thumbnailLink,createdTime,modifiedTime,fullFileExtension";
	
	HTTPЗапрос = Новый HTTPЗапрос("/upload/drive/v3/files?uploadType=multipart" + ПараметрыHTTP, Заголовки);
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
	
	SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	GoogleServer = "www.googleapis.com									 	
	Соединение = Новый HTTPСоединение(GoogleServer,,,,,,SSL);
	
	Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

	Ошибка = ОбработатьОтвет(Результат);
	Если Ошибка <> "" Тогда
		ВызватьИсключение Ошибка;
	КонецЕсли;
	
	СтрокаОтвет = Результат.ПолучитьТелоКакСтроку();
	СтрокаJSON = СтрокаОтвет;
		
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(СтрокаОтвет);
	ДанныеОтвет = ПрочитатьJSON(Чтение, Ложь);
	Чтение.Закрыть();
	
КонецПроцедуры

Функция СоздатьСообщение_Текст(СтрокаJSON)
	
	Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/json; charset=UTF-8");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку(СтрокаJSON);
	
	ЗаписьДанных.Закрыть();
	
	Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
	
КонецФункции


Функция ОбработатьОтвет(Результат)
	
	Если Результат.КодСостояния <> 200 И Результат.КодСостояния <> 204 тогда
		СтрокаОтвет = Результат.ПолучитьТелоКакСтроку();
		Чтение = Новый ЧтениеJSON;
		Чтение.УстановитьСтроку(СтрокаОтвет);
		ДанныеОтвет = ПрочитатьJSON(Чтение, Ложь);
		Чтение.Закрыть();
		Возврат ДанныеОтвет.Error.message;
	КонецЕсли;

	Возврат "";
	
КонецФункции


код возвращает: Invalid multipart request with 0 mime parts.
может кто-нибудь сталкивался с задачей создания папок?
1 Garykom
 
20.11.23
10:14
Проблема не в папках а в "multipart"
2 l4kom
 
20.11.23
10:17
Заголовки.Вставить("Content-Type",     "Multipart/Related; boundary=" + boundary);
тут?
3 Garykom
 
20.11.23
10:28
каталог это документ с mimeType application/vnd.google-apps.folder

https://infostart.ru/1c/articles/1273600/
4 Garykom
 
20.11.23
10:30
(2) сравни с примером в (3)
Процедура ЗагрузитьФайлНаГуглДиск(ПутьКФайлу, access_token, mimeType) Экспорт
5 Garykom
 
20.11.23
10:31
6 l4kom
 
20.11.23
11:22
спасибо. разобрался (:
Программист всегда исправляет последнюю ошибку.