Home > front end >  Wordpress api post image raw data without being blank in media library
Wordpress api post image raw data without being blank in media library

Time:12-21

So, to get to the heart of the matter, I want to post an image on a worpress site with the api (v2).

First part of the problem is that I don't have a url or file path, I just have the raw data of the image in a variable that I get from an export done before.

The second part of the problem is that once posted (well normally), the image appears blank in the media library in the admin.

Here is my code :

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;
        }

I use Guzzle for make the request.

If anyone knows what I'm missing, I'll take it :-).

CodePudding user response:

I found a solution !

      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;
  • Related