WordPress API发布图像原始数据,在媒体库中不为空

时间:2021-12-16 作者:Warshow

所以,为了抓住问题的核心,我想在worpress网站上发布一张图片api (v2).

问题的第一部分是我don\'t have a url or file path, 我只是有raw data of the image 在我之前导出的变量中。

问题的第二部分是,一旦发布(正常情况下),图像appears blank 在管理的媒体库中。

这是我的代码:

if (isset($product[\'priority_web_image\'])) {

            $image_name = $product[\'priority_web_image\'][\'filename\'];
            $data = $product[\'priority_web_image\'][\'data\'];
            $ext = substr($image_name, strpos($image_name, ".") + 1);
            if ($ext == \'jpg\') {
                $ext = \'jpeg\';
            }
            $mime_type = \'image/\'.$ext;

            $headers = [
                \'Authorization\' => \'Bearer \'.$result_auth->access_token,
                "cache-control" => "no-cache",
                "Content-Type"  =>  $mime_type,
                "Content-Disposition" => "attachement;filename=".$image_name,
              ];

            $body = [
                "source_url"  =>  $data,
                "slug"        =>  "image_test_pimcore",
                "status"      =>  "future",
                "title"       =>  $image_name,
                "media_type"  => "image",
                "mime_type"   =>  $mime_type
            ];

            $options = [
                "headers"      =>  $headers,
                "form_params"  =>  $body,
                
            ];
            $result = $this->WPApi->request("POST", "media", $options);
            $bodyAry = json_decode($result->getBody());
            //echo print_r($bodyAry);
            return $bodyAry;
        }

我用狂饮来提出请求。

如果有人知道我错过了什么,我会接受:-)。

1 个回复
最合适的回答,由SO网友:Warshow 整理而成

我找到了解决办法!

      file_put_contents($filepath, base64_decode($data));

      // Make sure the image exist
      if (!file_exists($filepath)){return;}

      // Load the image
      $file = file_get_contents($filepath);

      // Get the filename
      $filename = $image_name? $image_name : basename($filepath);

      // Initiate curl.
      $ch = curl_init();
      curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt( $ch, CURLOPT_URL, $url .\'/wp-json/wp/v2/media/\' );
      curl_setopt( $ch, CURLOPT_POST, 1 );
      curl_setopt( $ch, CURLOPT_POSTFIELDS, $file );
      curl_setopt( $ch, CURLOPT_HTTPHEADER, [
          "Content-Disposition: form-data; filename=\\"$filename\\"",
          \'Authorization: Bearer \' .$result_auth->access_token,
      ] );
      $result = curl_exec( $ch );
      curl_close( $ch );

      // Decode the response
      $api_response = json_decode($result);

      return $api_response;

相关推荐

AJAX操作未触发PHP函数

我以前在WordPress中使用过Ajax,并使其正常工作。然而,事实证明,这种特殊情况(文件上传)很困难。问题似乎是,尽管我在AJAX中设置了操作,但该操作并没有调用php函数formData.append( \'action\', \'uc_user_image\' ); 与PHP中的函数名相同function uc_user_image()我知道Ajax正在工作,因为我在success: function(data) {} 控制台中没有任何错误。我的最终目标是允许用户通过其帐户页面动态更改其个人资料