Пользовательские данные нулевого тела конечной точки WP API

#json #wordpress #wordpress-rest-api

#json #wordpress #wordpress-rest-api

Вопрос:

У меня странная проблема, которая поражает мою голову. Вероятно, я упускаю из виду что-то незначительное, но, хоть убейте, я не могу этого понять.

Вот предпосылка:

  • Я делаю запрос POST к пользовательской зарегистрированной конечной точке api в среде wp, на которую я отправляю данные json из формы. Тип содержимого задан правильно, и если я выполняю отладку, сбрасывая $request-> get_body(), он показывает правильные данные, которые я передал.
  • тем не менее, я также отправляю данные изображения в кодировке base64, полученные из программы чтения файлов. Если я добавлю другой элемент к отправляемым данным и строку base64 в качестве значения для него, дамп станет НУЛЕВЫМ. Удаление строки base64 из json приводит к тому, что дамп снова становится нормальным.

Я также попытался увеличить максимальный размер загрузки и размер публикации, однако, поскольку файл, который я использую в качестве теста, составляет 20 КБ, я не думаю, что это проблема.

Я надеюсь, что кто-нибудь может помочь мне увидеть ошибку моих путей.

Вот фрагмент кода. Обратите внимание, что URL-адрес здесь не настоящий, но реальный в моей среде. Кроме того, из-за ограничения символов я не смог опубликовать все изображение base64 во фрагменте, но будьте уверены, что оно правильное. Я даже пытался использовать прозрачное изображение размером 1 на 1 пиксель, и у меня была та же проблема.

 var image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4QDeRXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAAA4YwAA6AMAADhjAADoAwAABwAAkAcABAAAADAyMTABkQcABAAAAAECAwCGkgcAFgAAAMAAAAAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAABgCAAADoAQAAQAAAGIBAAAAAAAA...";

var data = {
    'test': 'hello world',
    'image': image
};

var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify(data);

var requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: raw,
    redirect: 'follow'
};

fetch("/wp-json/test/v1/testapi", requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log('error', error));
 

Комментарии:

1. Другое примечание: json_last_error() возвращает 0

Ответ №1:

Я решил проблему. Это не было связано с json / javascript / api. Это была простая проблема владения папкой tmp. Поскольку php, управляющий запросом, не выдавал ошибок, я никогда не замечал УВЕДОМЛЕНИЯ PHP о проверке разрешений во временной папке, поскольку php не смог загрузить туда временный файл. И действительно, хотя разрешения были в порядке, групповое владение не было.

Извините, что потратил время всех. Спасибо.