Добавить файл к задаче через API

Вопросы/проблемы по интеграции
Ответить
ethx
Сообщения: 15
Зарегистрирован: Пн авг 08, 2016 2:11 am

Добавить файл к задаче через API

Сообщение ethx » Чт авг 25, 2016 2:07 am

Здравствуйте!

Пытаюсь загрузить файл на сервер к необходимой задаче через http://api.onlyoffice.com/portals/metho ... ntityfiles
Пишу в 1С:Предприятие

В результате получаю ответ:

Код: Выделить всё

{"status":1,"statusCode":500,"error":{"message":"The specified content type is invalid.","hresult":-2146233033,"data":{}}}
Похоже что то с параметрами которые передаются....
Файл для отправки собирается из массива "МассивФайлов" в который пишу параметры, сам файл и окончание -- Boundary --

Код: Выделить всё

Функция ОпрФайл()
 	

	ЗадачаНомер = 230;
	token ="DV9MdIyrvvAik5********************************************gwV3jQXeM5txHce";
	
	Хост = "onlyoffice******.org";
	УРЛ = "/api/2.0/project/" + ЗадачаНомер + "/entityfiles/upload";
	
	ИмяФайлаОтвета = КаталогВременныхФайлов() + "rep.rep";
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	имяФайлаСПараметрами = КаталогВременныхФайлов()+"p.1"; // первый файл, содержащий параметры
	
	ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами, КодировкаТекста.ANSI);
 
	// параметр "entityType"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""entityType""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("task");
	
	// параметр "folder_id"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""folderid""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("24");

	// параметр "createNewIfExist"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""createNewIfExist""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("true");

	// параметр "storeOriginalFileFlag"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""storeOriginalFileFlag""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("true");
	
	
	// начало параметра "file"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""Penguins.jpg""");
	ЗаписьТекста.ЗаписатьСтроку("Content-Type: image/jpeg");   //("Content-Type: application/octet-stream");
	ЗаписьТекста.ЗаписатьСтроку("");
	
	ЗаписьТекста.Закрыть(); // заканчиваем работу с файлом 1
	
	
	МассивФайлов = Новый Массив;
	массивФайлов.Добавить(имяФайлаСПараметрами);
	массивФайлов.Добавить("c:\Users\Public\Pictures\Sample Pictures\Penguins.jpg");
	
	
	имяФайлаСПараметрами = КаталогВременныхФайлов()+"p.2";
	ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами, КодировкаТекста.ANSI);
	
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--");
	ЗаписьТекста.Закрыть(); 
	
	массивФайлов.Добавить(имяФайлаСПараметрами);


	// результирующий файл, который и будет отправлен
	имяФайлаОтправки = КаталогВременныхФайлов()+"send";

	// объединим все файлы
	//ОбъединитьФайлы(массивФайлов, имяФайлаОтправки);

 
 
	ФайлОтправки = Новый Файл(имяФайлаОтправки);
	РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

	// передадим данные на сервер 
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("Host", Хост);
	Заголовки.Вставить("Content-Type", "multipart/form-data, boundary="+boundary);

	//Заголовки.Вставить("POST");
	//Заголовки.Вставить("Accept", "application/json");
	//Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
	
	Заголовки.Вставить("Authorization", token);
	Заголовки.Вставить("Content-Length", РазмерФайлаОтправки);
	
	//Заголовки.Вставить("Expect", "");
	//Заголовки.Вставить("Proxy-Authorization", "");



	Соединение = Новый HTTPСоединение(Хост);
	Соединение.ОтправитьДляОбработки(имяФайлаОтправки, УРЛ, ИмяФайлаОтвета, Заголовки);  	
	
	
	
КонецФункции

Sergey
Сообщения: 376
Зарегистрирован: Чт май 26, 2016 8:28 am

Re: Добавить файл к задаче через API

Сообщение Sergey » Чт авг 25, 2016 9:45 am

Попробуйте после функции

Код: Выделить всё

  ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами, КодировкаТекста.ANSI);
Прописать

Код: Выделить всё

 ЗаписьТекста.ЗаписатьСтроку("Content-Type: multipart/form-data; boundary="+boundary);
   ЗаписьТекста.ЗаписатьСтроку("");

Код: Выделить всё

  // параметр "entityType"

ethx
Сообщения: 15
Зарегистрирован: Пн авг 08, 2016 2:11 am

Re: Добавить файл к задаче через API

Сообщение ethx » Пт авг 26, 2016 2:04 am

Здравствуйте!
Спасибо за помощь. Разобрался.
Вот рабочий вариант функции.

Код: Выделить всё


Функция ОтпрФайлвОО()
	
	// получаем предварительно запросом, или из УРЛ
	ПапкаНомер = 24;
	ЗадачаНомер = 230;
	
	Хост = "onlyoffice*******.org";
	УРЛ = "/api/2.0/project/" + ЗадачаНомер + "/entityfiles/upload";
	
	// токен авторизации получаем предварительно запросом
	token ="DV9MdIyrvvAik5YQIKKsONJagxAQT6LNu***********************Yb3qd8wYjZM125T04T84i0m+zJEq0fbXjgwV3jQXeM5txHce";
	
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");

	ВыбФайл = Новый Файл("c:\Users\Public\Pictures\Sample Pictures\Penguins.jpg");
	
	МассивФайлов = Новый Массив;
	ИмяФайлаОтвета = КаталогВременныхФайлов() + "rep.rep";
	имяФайлаСПарам1 = КаталогВременныхФайлов()+"p.1"; 
	имяФайлаСПарам2 = КаталогВременныхФайлов()+"p.2";
	
	// результирующий файл, который будет отправлен
	имяФайлаОтправки = КаталогВременныхФайлов()+"send";

	
	ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПарам1, КодировкаТекста.UTF8);
	
	// параметр "entityType"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""entityType""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("task");
	
	// параметр "folder_id"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""folderid""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку(ПапкаНомер);

	// параметр "createNewIfExist"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""createNewIfExist""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("true");

	// параметр "createNewIfExist"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""storeOriginalFileFlag""");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("true");
	
	// начало параметра "file"
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ВыбФайл.Имя + """");
	ЗаписьТекста.ЗаписатьСтроку ("Content-Type:  application/octet-stream"); 
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.Закрыть();
	
	ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПарам2, КодировкаТекста.UTF8);
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
	ЗаписьТекста.Закрыть();
	
	массивФайлов.Добавить(имяФайлаСПарам1);
	массивФайлов.Добавить(ВыбФайл.ПолноеИмя);
	массивФайлов.Добавить(имяФайлаСПарам2); 
	
	// объединим все файлы
	ОбъединитьФайлы(массивФайлов, имяФайлаОтправки);
 
	ФайлОтправки = Новый Файл(имяФайлаОтправки);
	РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

	// передадим данные на сервер 
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("Host", Хост);
	Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + boundary);
	Заголовки.Вставить("Authorization", token);
	Заголовки.Вставить("Content-Length", РазмерФайлаОтправки);

	Соединение = Новый HTTPСоединение(Хост);
	Соединение.ОтправитьДляОбработки(имяФайлаОтправки, УРЛ, ИмяФайлаОтвета, Заголовки);  	
	
	
	
КонецФункции


Sergey
Сообщения: 376
Зарегистрирован: Чт май 26, 2016 8:28 am

Re: Добавить файл к задаче через API

Сообщение Sergey » Пт авг 26, 2016 6:53 am

Спасибо, за информацию.

Ответить