laravel - Upload image to facebook using graph api in PHP

I'm trying to upload an image to facebook using graph api. I want to submit the image as a file instead of providing a URL which is another option. I'm using PHP Laravel and guzzle to achieve this. Unfortunately when I upload the file I'm getting an error which would seem to indicate that the image is not recognised.

This is the documentation I am using

https://developers.facebook.com/docs/graph-api/reference/page/photos/#publish

This is my error message

message: "Client error: `POST https://graph.facebook.com/v12.0/99999999999/photos` resulted in a `400 Bad Request` response:\n{\"error\":{\"message\":\"(#324) Requires upload file\",\"type\":\"OAuthException\",\"code\":324,\"fbtrace_id\":\"ACxilINTWYdb3wGOXfGg7 (truncated...)\n"

Here is my code

public function media(Request $request)
{

    $facebookPageConnection = FacebookPageConnection::find(2);
    $file = $request->file('file');

    $client = new Client();
    $body = $client->post("https://graph.facebook.com/v12.0/$facebookPageConnection->facebook_page_id/photos", [
        'multipart' => [
            [
                'name'     => 'message',
                'contents' => 'test post'
            ],
            [
                'name'     => 'source',
                'contents' => base64_encode(file_get_contents($file))
            ],
            [
                'name'     => 'access_token',
                'contents' => $facebookPageConnection->access_token
            ]
        ]
    ])->getBody();

    return json_decode($body);
}

Answer

Solution:

My mistake was to use

file_get_contents

and

base64_encode

Instead to get it to work I needed to use fopen

    $body = $client->post("https://graph.facebook.com/v12.0/$facebookPageConnection->facebook_page_id/photos", [
        'multipart' => [
            [
                'name'     => 'message',
                'contents' => 'test post'
            ],
            [
                'name'     => 'source',
                'contents' => fopen($file, 'rb')
            ],
            [
                'name'     => 'access_token',
                'contents' => $facebookPageConnection->access_token
            ]
        ]
    ])->getBody();

Source