Upload Files Needed When Creating Associations - Alfresco Content Services - 23.4 - 23.4 - Ready - Alfresco - external

Alfresco Content Services

Platform
Alfresco
Product
Alfresco Content Services
Release
23.4
License

As we learned, a gadget file cannot be created without an associated picture. If we tried we would get an error such as:

{
  "error": {
	"errorKey": "framework.exception.ApiDefault",
	"statusCode": 422,
	"briefSummary": "10190002 Found 1 integrity violations:\nThe association child multiplicity has been violated:
...

So we need to upload a gadget picture first.

Before uploading any files create a folder called My Gadgets under /Company Home (i.e. root). To do this we POST to the /nodes/{id}/children URL:

curl -H "Content-Type: application/json" -d '{"name":"My Gadgets","nodeType":"cm:folder"}' -H 'Authorization: Basic VElDS0VUXzA4ZWI3ZTJlMmMxNzk2NGNhNTFmMGYzMzE4NmNjMmZjOWQ1NmQ1OTM=' http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children | jq

Now we can upload the gadget picture, prepare a PNG somewhere with the filename gadget-picture.png and then upload it as follows:

$ curl -X POST -F filedata=@gadget-picture.png -F "name=gadget-picture.png" -F "nodeType=cm:content" -F "relativePath=My Gadgets" -H 'Authorization: Basic VElDS0VUXzA4ZWI3ZTJlMmMxNzk2NGNhNTFmMGYzMzE4NmNjMmZjOWQ1NmQ1OTM=' http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 43532    0   701  100 42831   1070  65390 --:--:-- --:--:-- --:--:-- 66359
{
  "entry": {
    "isFile": true,
    "createdByUser": {
      "id": "admin",
      "displayName": "Administrator"
    },
    "modifiedAt": "2019-10-21T09:32:53.121+0000",
    "nodeType": "cm:content",
    "content": {
      "mimeType": "image/png",
      "mimeTypeName": "PNG Image",
      "sizeInBytes": 42303,
      "encoding": "UTF-8"
    },
    "parentId": "e2bdf9a3-ef31-469f-aeb4-07f2083961b3",
    "aspectNames": [
      "cm:versionable",
      "cm:titled",
      "cm:auditable",
      "cm:author",
      "exif:exif"
    ],
    "createdAt": "2019-10-21T09:32:53.121+0000",
    "isFolder": false,
    "modifiedByUser": {
      "id": "admin",
      "displayName": "Administrator"
    },
    "name": "gadget-picture.png",
    "id": "b8dc45cd-6828-41df-a908-e0fa8dbbd96b",
    "properties": {
      "exif:pixelYDimension": 340,
      "cm:versionType": "MAJOR",
      "cm:versionLabel": "1.0",
      "exif:pixelXDimension": 340
    }
  }
}

Make a note about the Node Identifier for the gadget-picture.png file as we are going to need it in a bit. While we are at it we can also prepare two of the other associations that we can specify when we create a gadget node. Let’s first upload a gadget review. Create a text file called gadget-review.txt and upload it as follows to the My Gadgets folder:

$ curl -X POST -F filedata=@gadget-review.txt -F "name=gadget-review.txt" -F "nodeType=cm:content" -F "relativePath=My Gadgets" -H 'Authorization: Basic VElDS0VUXzA4ZWI3ZTJlMmMxNzk2NGNhNTFmMGYzMzE4NmNjMmZjOWQ1NmQ1OTM=' http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1212    0   638  100   574   2345   2110 --:--:-- --:--:-- --:--:--  4472
{
  "entry": {
    "isFile": true,
    "createdByUser": {
      "id": "admin",
      "displayName": "Administrator"
    },
    "modifiedAt": "2019-10-21T09:42:48.727+0000",
    "nodeType": "cm:content",
    "content": {
      "mimeType": "text/plain",
      "mimeTypeName": "Plain Text",
      "sizeInBytes": 47,
      "encoding": "ISO-8859-1"
    },
    "parentId": "e2bdf9a3-ef31-469f-aeb4-07f2083961b3",
    "aspectNames": [
      "cm:versionable",
      "cm:titled",
      "cm:auditable",
      "cm:author"
    ],
    "createdAt": "2019-10-21T09:42:48.727+0000",
    "isFolder": false,
    "modifiedByUser": {
      "id": "admin",
      "displayName": "Administrator"
    },
    "name": "gadget-review.txt",
    "id": "581baebd-3814-4cd0-884a-3179f2dac0ac",
    "properties": {
      "cm:versionLabel": "1.0",
      "cm:versionType": "MAJOR"
    }
  }
}

Make a note about the Node Identifier for the gadget-review.txt file as we are going to need it too later. Next let’s also create a company node:

$ curl -H "Content-Type: application/json" -d '{"relativePath":"My Gadgets", "name":"Cool Gadgets Inc","nodeType":"fdk:company", "properties": {"fdk:email":"info@coolgadgets.com","fdk:url":"www.coolgadgets.com","fdk:city":"London"}}' -H 'Authorization: Basic VElDS0VUXzA4ZWI3ZTJlMmMxNzk2NGNhNTFmMGYzMzE4NmNjMmZjOWQ1NmQ1OTM=' http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   844    0   659  100   185   9835   2761 --:--:-- --:--:-- --:--:-- 12597
{
  "entry": {
    "isFile": true,
    "createdByUser": {
      "id": "admin",
      "displayName": "Administrator"
    },
    "modifiedAt": "2019-10-21T10:01:55.279+0000",
    "nodeType": "fdk:company",
    "content": {
      "mimeType": "application/octet-stream",
      "mimeTypeName": "Binary File (Octet Stream)",
      "sizeInBytes": 0,
      "encoding": "UTF-8"
    },
    "parentId": "e2bdf9a3-ef31-469f-aeb4-07f2083961b3",
    "aspectNames": [
      "cm:auditable"
    ],
    "createdAt": "2019-10-21T10:01:55.279+0000",
    "isFolder": false,
    "modifiedByUser": {
      "id": "admin",
      "displayName": "Administrator"
    },
    "name": "Cool Gadgets Inc",
    "id": "5bae662a-b450-49c0-8f40-8ba2046aa423",
    "properties": {
      "fdk:email": "info@coolgadgets.com",
      "fdk:city": "London",
      "fdk:url": "www.coolgadgets.com"
    }
  }
}
CAUTION: If you get an error response saying “fdk:company isn’t a valid QName” it means you haven’t installed the FDK content model properly.