自定义 WP API 端点 NULL 正文数据
Custom WP API endpoint NULL body data
我有一个奇怪的问题,这让我很头疼。这可能是我忽略的小问题,但对于我来说我无法弄清楚。
前提是:
- 我正在向 wp 环境中自定义注册的 api 端点发出 POST 请求,我从表单向其发送 json 数据。内容类型设置正确,如果我通过转储 $request->get_body() 进行调试,它会显示我传递的正确数据。
- 但是,我还发送了 base64 编码的图像数据,这些数据来自文件 reader。如果我将另一个项目添加到正在发送的数据中,并将 base64 字符串作为它的值,则转储变为 NULL。从 json 中取出 base64 字符串,使转储再次正常。
我也尝试增加最大上传大小,但是 post 大小,因为我用作测试的文件是 20 KB,我认为这不是问题所在。
我希望有人能帮我看看我方法的错误。
这是一个代码片段。请注意,URL 在这里不是真实的,但在我的环境中是真实的。此外,由于字符限制,我无法 post 片段中的整个 base64 图像,但请放心,它是正确的。我什至尝试使用 1px x 1px 透明图像,但我遇到了同样的问题。
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));
我已经解决了这个问题。它与 json / javascript / api 无关。
这是一个简单的 tmp 文件夹所有权问题。由于 php 管理请求没有出现错误,我从未注意到 PHP NOTICE 说要检查临时文件夹中的权限 php 无法在那里上传临时文件。事实上,虽然权限很好,但组所有权却不是。
抱歉浪费了大家的时间。谢谢。
我有一个奇怪的问题,这让我很头疼。这可能是我忽略的小问题,但对于我来说我无法弄清楚。
前提是:
- 我正在向 wp 环境中自定义注册的 api 端点发出 POST 请求,我从表单向其发送 json 数据。内容类型设置正确,如果我通过转储 $request->get_body() 进行调试,它会显示我传递的正确数据。
- 但是,我还发送了 base64 编码的图像数据,这些数据来自文件 reader。如果我将另一个项目添加到正在发送的数据中,并将 base64 字符串作为它的值,则转储变为 NULL。从 json 中取出 base64 字符串,使转储再次正常。
我也尝试增加最大上传大小,但是 post 大小,因为我用作测试的文件是 20 KB,我认为这不是问题所在。
我希望有人能帮我看看我方法的错误。
这是一个代码片段。请注意,URL 在这里不是真实的,但在我的环境中是真实的。此外,由于字符限制,我无法 post 片段中的整个 base64 图像,但请放心,它是正确的。我什至尝试使用 1px x 1px 透明图像,但我遇到了同样的问题。
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));
我已经解决了这个问题。它与 json / javascript / api 无关。 这是一个简单的 tmp 文件夹所有权问题。由于 php 管理请求没有出现错误,我从未注意到 PHP NOTICE 说要检查临时文件夹中的权限 php 无法在那里上传临时文件。事实上,虽然权限很好,但组所有权却不是。
抱歉浪费了大家的时间。谢谢。