Добрый день!
Подскажите, пожалуйста, как добавить файл в приложение используя протокол OData4. Спасибо!
Нравится
Есть получение, изменение и удаление - https://academy.terrasoft.ru/docs/7-17/developer/integrations_and_api/d…
Почему же нет добавления?
Руслан, уточнил, такая возможность тоже есть.
Через OData для этого понадобится два запроса (POST для создания записи в таблице и PUT для заполнения содержимого файла).
Ваше пожелание зафиксировали, информацию в академии должны дополнить.
Зверев Александр,
Отлично, Александр! Я так тоже пробовал, но при попытке создать запись в объект OpportunityFile возникает ошибка. Подожду что напишут в инструкции. Может какие то детали всплывут.
Руслан Хасанов,
А почему Вы не хотите обратиться в поддержку, чтобы Вам предоставили инструкцию по данному вопросу?
Дело в том, что информация в академии может быть изменена не так быстро, как хотелось бы)
Руслан Хасанов,
Вы можете также в этом посте подробнее описать, с какой ошибкой столкнулись.
Т.к. не нашел команды добавления файла в приложение, то решил пойти другим путем - создать запись в таблице OpportunityFile, а потом изменить значение колонки с данными. Но при попытке отправить запрос на создание записи выходит ошибка "500 Internal Server Error" и текст сообщения:
{ "error": { "code": "", "message": "An error has occurred." } }
Вот примерный код запроса:
curl --location --request POST 'https://my.server.com/0/odata/OpportunityFile' \ --header 'BPMCSRF: wGPAf9dJpOsuoMMZcUufku' \ --header 'Content-Type: application/json' \ --header 'ForceUseSession: true' \ --data-raw '{ "Name": "Field2Value" }'
Руслан, там говорили о PUT, а не POST для наполнения содержимого.
В документации OData упоминается тоже PUT.
Зверев Александр,
Не внимательно вы прочитали мое сообщение. Мне надо добавить файл, а не изменить. Поэтому я сначала отравлял POST запрос с пустым полем Data (документация OData), а потом как раз хотел использовать PUT (как указано в документации), для изменения данных.
В таком случае ошибка может быть связана не с полем для данных. Более подробную информацию при ошибках пишет в лог сайта.
Как минимум, смущает отсутствие названий и значений других полей, в том числе TypeId, Version, Size и OpportunityId для связи с разделом.
Зверев Александр,
Спасибо, Александр, за подсказку. Указал дополнительные поля:
curl --location --request POST 'https://my.server.com/0/odata/OpportunityFile' \ --header 'BPMCSRF: Bu22JsKAnOHOxv1HjfcigO' \ --header 'Content-Type: text/plain' \ --data-raw '{ "Name": "filename.ext", "TypeId": "529BC2F8-0EE0-DF11-971B-001D60E938C6", "Version": "1", "Size": "0", "ProcessListeners", "0", "OpportunityId", "9cbc64b5-2e4c-44ca-b551-58739e6099b7" }'
Теперь ошибка другая (415 Unsupported Media Type):
{ "error": { "code": "", "message": "The request entity's media type 'text/plain' is not supported for this resource." } }
Не дает этот запрос создать запись без двоичных данных в теле запроса. Попробую вынести параметры в адресную строку и файл вложить в тело запроса.
Сформировал следующий запрос:
curl --location --request POST 'https://my.server.com/0/odata/OpportunityFile?name=kyoScan-4.23.2020-14.07.08.pdf&typeid=529BC2F8-0EE0-DF11-971B-001D60E938C6&version=1&size=98888&ProcessListeners=0&OpportunityId=9cbc64b5-2e4c-44ca-b551-58739e6099b7' \ --header 'BPMCSRF: Bu22JsKAnOHOxv1HjfcigO' \ --header 'Content-Type: application/pdf' \ --data-binary '@/D:/kyoScan-4.23.2020-14.07.08.pdf'
Выдает такую же ошибку - 415 Unsupported Media Type.
Пробовал передавать doc и png файлы, так же 415-ая ошибка.
{ "error": { "code": "", "message": "The request entity's media type 'application/pdf' is not supported for this resource." } }
Если дело только в невозможности загрузить pdf, doc и png, проверьте ещё системные настройки безопасной загрузки файлов, может, там нет нужных типов.