首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在自定义端点中要求文件

如何在自定义端点中要求文件
EN

WordPress Development用户
提问于 2019-04-26 01:21:29
回答 1查看 665关注 0票数 0

我正在处理一个自定义端点,以便使用media_handle_upload()处理ajax媒体上传。

我已经创建了一个具有经过测试和工作的路由的自定义端点,但是,当我尝试要求必要的文件以便我可以使用media_handle_upload()时,它会返回每个请求的500个内部服务器错误,但仍然正确地将媒体上传到媒体库。

我已经想了一段时间了,但我不明白为什么会发生这种事。

希望这里有人能给我指明正确的方向!

为了进行清除,一切都按预期工作,内部服务器错误不会妨碍上传的正确进行,但是无论发生什么情况,每个请求都会发生错误。

/inc/custom-routes/custom-route.php)是要上传的函数:(自定义路由文件= <#>Here

代码语言:javascript
复制
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给出的答案是正确的,我正在用新代码进行更新,这样如果其他人犯了我做的同样的错误,他们就会看到完整的工作代码。

代码语言:javascript
复制
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!";
          }

        }
EN

回答 1

WordPress Development用户

回答已采纳

发布于 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

代码语言:javascript
复制
// Works, but with a 500 status code.
function uploadFileFE() {
    wp_die();
}

Option 2

代码语言:javascript
复制
// Works, but shouldn't be used unless the client is *not* expecting a JSON response.
function uploadFileFE() {
    echo 'foo';
}

Option 3

代码语言:javascript
复制
// 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 ) );
}
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/336360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档