Добавить файл через OData4

Добрый день! 

Подскажите, пожалуйста, как добавить файл в приложение используя протокол OData4. Спасибо!

Нравится

14 комментариев

Руслан, для добавления файлов не используют OData, для этого есть специальный сервис FileApiService. По работе с ним см. темы.

Есть получение, изменение и удаление - 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, проверьте ещё системные настройки безопасной загрузки файлов, может, там нет нужных типов.

Показать все комментарии