Попробуйте самый простой и быстрый способ 
установки OnlyOffice

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

Вопросы/проблемы по интеграции

Добавить файл к задаче через 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Соединение(Хост);
   Соединение.ОтправитьДляОбработки(имяФайлаОтправки, УРЛ, ИмяФайлаОтвета, Заголовки);     
   
   
   
КонецФункции
ethx
 
Сообщения: 15
Зарегистрирован: Пн авг 08, 2016 2:11 am

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

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

Попробуйте после функции
Код: Выделить всё
  ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами, КодировкаТекста.ANSI);

Прописать
Код: Выделить всё
 ЗаписьТекста.ЗаписатьСтроку("Content-Type: multipart/form-data; boundary="+boundary);
   ЗаписьТекста.ЗаписатьСтроку("");

Код: Выделить всё
  // параметр "entityType"
Sergey
 
Сообщения: 376
Зарегистрирован: Чт май 26, 2016 8:28 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Соединение(Хост);
   Соединение.ОтправитьДляОбработки(имяФайлаОтправки, УРЛ, ИмяФайлаОтвета, Заголовки);     
   
   
   
КонецФункции

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

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

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

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


Вернуться в API

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron