Files¶
Parts of the Pure API model use files to store information, such as a ClassifiedFile
used to store a profile photo of a
Person or an ElectronicVersionFile
used to store an electronic version of a BookAnthology
. ClassifiedFile
,
ElectronicVersionFile
and other types that reference a file stored in Pure are collectively known as 'file referencing
types'. An instance of such a type is known as a 'file referencing object' - an object that references a file stored in
Pure, such as the profile photo metadata of a JPEG image stored in Pure.
You can download the file of an existing file referencing object and you can associate file data with a new file referencing object. You cannot replace the file associated with a file referencing object; you must first remove the file referencing object and add a new one.
Downloading files¶
You can download files using the /files
sub-resource of an API content object, further qualified with the fileId value
of a file referencing object, such as fileId of a ClassifiedFile in the case of profile photos on persons. A request
for /persons/<some person UUID>/files/<some ClassifiedFile.fileId profile photo value>
will stream the profile photo
image of a person.
Uploading files¶
You can associate file data with a file referencing object in two ways:
- By first uploading a file to register a temporary file and then using that temporary file on a file referencing object.
- By embedding bytes of a file directly on a file referencing object.
The following table lists pros and cons of the ways you can upload files to the Pure API:
Upload type | Recommended maximum file size | Number of requests required to add a file to an API model object | Recommended for |
---|---|---|---|
Embedded bytes | Sum of all embedded Base64 encoded bytes should be less than 1 megabyte per request | 1 | Low resolution profile photos |
Separate upload requests | None | 2 | Any type of file |
You only need to upload a file once; when it has been associated with a file referencing object the file will stay associated until the file referencing object is removed or the object, that the file referencing object is associated with, is deleted.
Info
A file referencing object requires a small subset of its metadata to be specified in addition to the file data: A filename specified for fileName, a MIME type specified for mimeType, and a file size specified for size.
Separate upload requests¶
Using separate upload requests is useful when you need to associate file data of arbitrary size.
Uploading a file using a separate upload request is a four-step process:
Fetch existing Pure API model object to manipulate file referencing objects of.
Register temporary file by uploading the files using /file-uploads
of the endpoint you will later be using the file
for, such as /persons/file-uploads
in case of a profile photo on a Person. An UploadedFile
is returned from each
upload request.
Modify file referencing objects to each use a UploadedFile
objects previously returned from each upload request. Such as
by setting a UploadedFile
as uploadedFile
on the ClassifiedFile
object that represents information about a specific
profile photo of the currently handled Person
.
Submit the created/updated Pure API model object to the relevant endpoint, such as /persons
.
{
"pureId": 417899,
"uuid": "29492640-5030-4843-91c1-7d85ca997749",
"profilePhotos": [
{
"uploadedFile": {
"digest": "c61df35de3ad4168ef85a2ff30bb5f096eb913cd",
"digestType": "SHA-1",
"size": 16956,
"mimeType": "image/jpeg",
"timeStamp": "2022-03-23T07:11:24.751181Z",
"expires": "2022-03-23T09:11:24.751197Z",
"key": "0a4f5fa4-5cf3-40b0-ad06-77471544350e"
},
"fileName": "small_image_added.jpeg",
"mimeType": "image/jpeg",
"size": 12551,
"type": {
"uri": "/dk/atira/pure/person/personfiles/portrait"
}
}
}
]
}
{
"pureId": 417899,
"uuid": "29492640-5030-4843-91c1-7d85ca997749",
"profilePhotos": [
{
"pureId": 417914,
"fileId": "MDY2MDdh",
"fileName": "small_image_added.jpeg",
"mimeType": "image/jpeg",
"size": 12551,
"url": "https://pure-api-test.devel.elsevierpure.com/ws/api/persons/29492640-5030-4843-91c1-7d85ca997749/files/MDY2MDdh/small_image_added.jpeg",
"type": {
"uri": "/dk/atira/pure/person/personfiles/portrait",
"term": {
"en_GB": "Portrait",
"es_ES": "Retrato",
"fr_FR": "portrait",
"de_DE": "Portrait"
}
}
}
]
}
UploadedFile
objects have a number of limitations:
- A temporary file registered using
/file-uploads
is short-lived; you can use anUploadedFile
for up to two hours. - You can only use an
UploadedFile
object on a single file referencing object. If you need to use a specific file on multiple file referencing objects then you must upload the file for each intended use.
Embedded bytes¶
Embedding bytes directly on a file associating object is useful in situations where you need to associate a small file. A single request is needed to submit file data for multiple file referencing objects on a Pure API model object.
Uploading a file using a embedded bytes is a three-step process:
Fetch existing Pure API model object to manipulate file referencing objects of.
Modify file referencing objects to have relevant base64-encoded file data set in the fileData field, such as by setting
fileData
on the ClassifiedFile
object that represents information about a specific profile photo of the currently
handled Person
.
Submit the created/updated Pure API model object to the relevant endpoint, such as /persons
.
{
"pureId": 417899,
"uuid": "29492640-5030-4843-91c1-7d85ca997749",
"profilePhotos": [
{
"fileData": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQU",
"fileName": "small_image_added.jpeg",
"mimeType": "image/jpeg",
"size": 12551,
"type": {
"uri": "/dk/atira/pure/person/personfiles/portrait"
}
}
]
}
{
"pureId": 417899,
"uuid": "29492640-5030-4843-91c1-7d85ca997749",
"profilePhotos": [
{
"pureId": 417919,
"fileId": "MDY2MDdm",
"fileName": "small_image_added.jpeg",
"mimeType": "image/jpeg",
"size": 12551,
"url": "https://pure-api-test.devel.elsevierpure.com/ws/api/persons/29492640-5030-4843-91c1-7d85ca997749/files/MDY2MDdh/small_image_added.jpeg",
"type": {
"uri": "/dk/atira/pure/person/personfiles/portrait",
"term": {
"en_GB": "Portrait",
"es_ES": "Retrato",
"fr_FR": "portrait",
"de_DE": "Portrait"
}
}
}
]
}