Добавить файл в ноду через REST. Как?

Главные вкладки

Аватар пользователя OldWiseCat OldWiseCat 15 марта 2013 в 12:33

Уже сутки бьюсь и не могу добавить файл в поле файл в ноду! Если предварительно залить файл, получить его фид, то появляется возможность заменить уже приаттаченный в поле файл на новый запросом PUT на endpoint/node/"nodenumber"  {"field_dl_file":{"und":[{"fid":999}]},"uid":1,"language":"und"} Однако, если после для файла пустое, то добавить туда файл невозможно! Подозреваю, что делается это путём некоего запроса на endpoint/node/"nodenumber"/attach_file, но какого - неясно. Кто-то сталкивался с подобной проблемой? Как решали?

P.S. Есть где-то вменяемая документация с примерами запросов к этому модулю?

Комментарии

Аватар пользователя fandm fandm 12 апреля 2013 в 11:25

В самих исходниках модуля Services в файле resources/node_resource.inc есть описание вызова функции _node_resource_attach_file, там приведён пример web-формы, с помощью которой можно отправить файл на endpoint/node/«nid»/attach_file.

Только в текущей версии модуля 3.3 в этой функции допущена ошибка, не хватает кода, который учитывает обязательные настройки поля, в которое прикрепляется файл. Взять этот код можно из исходников текущей dev-версии. Я так сделал и прикрепление файла к существующей ноде теперь отлично работает.

И ещё. Для работы этого метода загрузки файлов необходимо в настройках SERVER Вашего endpoint-а поставить галочку на "multipart/form-data" для Request parsing.

Ну и, разумеется, перед использованием attach_file необходимо авторизоваться. Делается это тоже POST-посылом параметров username и password на endpoint/user/login. При этом в настройках SERVER endpoint-а надо поставить галочку на "application/x-www-form-urlencoded" для Request parsing.

Кстати, авторизацию (и многие другие возможности модуля Services) можно протестировать с помощью дополнения Firefox Poster, а вот загрузку файлов с его помощью, увы, не проверишь, т.к. имя поля, содержащего путь к загружаемому файлу - строгое (files[]) и какое оно в Poster - не известно.