我正在处理一个自定义端点,以便使用media_handle_upload()处理ajax媒体上传。
我已经创建了一个具有经过测试和工作的路由的自定义端点,但是,当我尝试要求必要的文件以便我可以使用media_handle_upload()时,它会返回每个请求的500个内部服务器错误,但仍然正确地将媒体上传到媒体库。
我已经想了一段时间了,但我不明白为什么会发生这种事。
希望这里有人能给我指明正确的方向!
为了进行清除,一切都按预期工作,内部服务器错误不会妨碍上传的正确进行,但是无论发生什么情况,每个请求都会发生错误。
/inc/custom-routes/custom-route.php)是要上传的函数:(自定义路由文件= <#>Here
function uploadFileFE ($data) {
if ( isset( $_FILES["file"] ) ) {
require ABSPATH . 'wp-admin/includes/image.php';
require ABSPATH . 'wp-admin/includes/file.php';
require ABSPATH . 'wp-admin/includes/media.php';
$attachment_id = media_handle_upload( 'file', 0 );
if ( is_wp_error( $attachment_id ) ) {
// There was an error uploading the image.
echo $attachment_id->get_error_message();
} else {
// The image was uploaded successfully!
echo $attachment_id;
}
} else {
echo "The empty check failed! Something went horribly wrong!";
}
wp_die();
}<#>Update (带有工作代码,根据<>下面的答案进行调整)
所以,Sally给出的答案是正确的,我正在用新代码进行更新,这样如果其他人犯了我做的同样的错误,他们就会看到完整的工作代码。
function uploadFileFE ($data) {
if ( isset( $_FILES["file"] ) ) {
//$glSiteUrl = get_site_url();
// These files need to be included as dependencies when on the front end.
require ABSPATH . 'wp-admin/includes/image.php';
require ABSPATH . 'wp-admin/includes/file.php';
require ABSPATH . 'wp-admin/includes/media.php';
$attachment_id = media_handle_upload( 'file', 0 );
if ( is_wp_error( $attachment_id ) ) {
// There was an error uploading the image.
return $attachment_id->get_error_message();
} else {
// The image was uploaded successfully!
return $attachment_id;
}
} else {
return "The empty check failed! Something went horribly wrong!";
}
}发布于 2019-04-26 04:40:53
从wp_die() 参考文献,
$args (String)(可选)参数用于控制行为。如果
$args是一个整数,那么它将被视为响应代码。响应‘(int) HTTP响应代码。Ajax请求默认为200,否则为500。
所以REST端点返回错误500,因为这是wp_die函数发送的默认标头状态。
我建议您返回一个适当值 --例如,错误时返回一个WP_Error实例,或者在成功时返回一个WP_REST_Response实例。试一试这些变化,并比较它们的反应:
Option 1
// Works, but with a 500 status code.
function uploadFileFE() {
wp_die();
}Option 2
// Works, but shouldn't be used unless the client is *not* expecting a JSON response.
function uploadFileFE() {
echo 'foo';
}Option 3
// I'd use this. WordPress will apply rest_ensure_response() to the returned value.
function uploadFileFE() {
return 'foo';
//return WP_REST_Response( 'foo' ); // or use this, or below to send an error..
//return new WP_Error( 'invalid_file', 'Invalid file!', array( 'status' => 400 ) );
}https://wordpress.stackexchange.com/questions/336360
复制相似问题