Skip to content

Creating content with binary attachments via REST API

This page shows how to create content via the REST API on the example of uploading an image file.

Creating a draft

A draft is created with a POST request to /api/ezp/v2/content/objects. Its body should contain all of the required data in the structured format (see Creating content: data property). As for the response, it's possible to use either JSON or XML in input. The following examples use JSON (and assume HTTP Basic Auth is enabled).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// URL to eZ Platform installation
$base_url = "http://127.0.0.1";
// User credentials
$username = "admin";
$password = "publish";

if ($argc < 2) {
    // Print script usage
    echo "Usage: php $argv[0] <FILE_PATH>\n";
    exit(1);
}

// Request payload
$data = [
    'ContentCreate' => [
        'ContentType' => [
            // "Image" content type
            '_href' => "/api/ezp/v2/content/types/5",
        ],
        'mainLanguageCode' => 'eng-GB',
        'LocationCreate' => [
            'ParentLocation' => [
                // Destination location ("Media" root location in this case)
                '_href' => "/api/ezp/v2/content/locations/1/43",
            ],
            'sortField' => 'PATH',
            'sortOrder' => 'ASC',
        ],
        'Section' => [
            // "Media" section
            '_href' => "/api/ezp/v2/content/sections/3",
        ],
        'fields' => [
            'field' => [
                [
                    'fieldDefinitionIdentifier' => 'name',
                    'fieldValue' => 'File uploaded via REST API',
                ],
                [
                    'fieldDefinitionIdentifier' => 'image',
                    'fieldValue' => [
                        // Original file name
                        'fileName' => pathinfo($argv[1], PATHINFO_BASENAME),
                        // File size in bytes
                        'fileSize' => filesize($argv[1]),
                        // File content must be encoded as BASE64
                        'data' => base64_encode(file_get_contents($argv[1])),
                    ],
                ],
            ],
        ],
    ],
];

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "$base_url/api/ezp/v2/content/objects",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_USERPWD => "$username:$password",
    CURLOPT_HTTPHEADER => [
        "accept: application/json",
        "cache-control: no-cache",
        "content-type: application/vnd.ez.api.ContentCreate+json",
    ],
]);

$response = curl_exec($curl);

if (($err = curl_error($curl))) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

curl_close($curl);

Publishing the image

To publish the image use the following code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// URL to eZ Platform installation
$base_url = "http://127.0.0.1";
// User credentials
$username = "admin";
$password = "publish";

if ($argc < 2) {
   // Print script usage
   echo "Usage: php $argv[0] <ID>\n";
   exit(1);
}

$id = $argv[1];

// Publish the draft
$curl = curl_init();

curl_setopt_array($curl, [
   CURLOPT_URL => "$base_url/api/ezp/v2/content/objects/$id/versions/1",
   CURLOPT_RETURNTRANSFER => true,
   CURLOPT_ENCODING => "",
   CURLOPT_MAXREDIRS => 10,
   CURLOPT_TIMEOUT => 30,
   CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
   CURLOPT_CUSTOMREQUEST => "POST",
   CURLOPT_USERPWD => "$username:$password",
   CURLOPT_HTTPHEADER => []
       "accept: application/json",
       "cache-control: no-cache",
       "x-http-method-override: PUBLISH"
   ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
   echo "cURL Error #:" . $err;
} else {
   echo $response;
}