Basic Download
Using CURL command
For a given media object (VOD - not live) a user can request a file download for a particular offering (default is default) with either mp4 or prores format with optional start and end times (seconds, float). NOTE: An authorization token is required in order to obtain the necessary download permissions of the media object.
- Initiate a download
POST /call/media/files
curl -X POST https://host-76-74-91-16.contentfabric.io/q/iq__283C4mvqMV62o88srZPzRtUA1bCb/call/media/files -d '{"format":"mp4", "offering":"default"}' -H "Authorization: Bearer $TOKEN"
Response:
{
"job_id":"tqlfinodMXMYGHMLHzxH2r5QrL7jK5wP4ve-iq__283C4mvqMV62o88srZPzRtUA1bCb-default--mp4-000000-000000"
}
- Check status
GET /call/media/files/{job_id}
curl https://host-76-74-91-16.contentfabric.io/q/iq__283C4mvqMV62o88srZPzRtUA1bCb/call/media/files/tqlfinodMXMYGHMLHzxH2r5QrL7jK5wP4ve-iq__283C4mvqMV62o88srZPzRtUA1bCb-default--mp4-000000-000000 -H "Authorization: Bearer $TOKEN"
Response:
{
"offering": "default",
"format": "mp4",
"status": "completed",
"progress": 100
}
- Download the file
GET /call/media/files/{job_id}/download
File name and content disposition are set automatically (since there is no need for the user to change the file name or the disposition)
https://host-76-74-91-16.contentfabric.io/q/iq__283C4mvqMV62o88srZPzRtUA1bCb/call/media/files/tqlfinodMXMYGHMLHzxH2r5QrL7jK5wP4ve-iq__283C4mvqMV62o88srZPzRtUA1bCb-default--mp4-000000-000000/download?authorization=$TOKEN
Using Eluvio Client
For a given media object (VOD - not live) a user can initialize the Eluvio Client to request a file download for a particular offering (default is default) with either mp4 or prores format with optional start and end times (seconds, float) by simply calling the MakeFileServiceRequest method call.
Sample Code
const { ElvClient } = require("@eluvio/elv-client-js");
const Download = async () => {
// Parameters
const versionHash = "hq__CV3hoSLZwLneto5wNBJGJJqgVUPVyaYErPdex6nFKC69SPaB782BGFEohTDEGG1JhZ9igUE65yw";
const format = "mp4";
const offerings = "default";
const filename = "MyFile.mp4";
try {
const client = await ElvClient.FromNetworkName({
networkName: "demo"
});
const wallet = client.GenerateWallet();
const signer = wallet.AddAccount({
privateKey: process.env.PRIVATE_KEY
});
client.SetSigner({signer});
// Start download job
const response = await client.MakeFileServiceRequest({
versionHash: versionHash,
path: "/call/media/files",
method: "POST",
body: {
format,
offerings,
filename
}
});
const jobId = response.job_id
// Check download job status until complete
let downloadJobStatus;
do {
// Wait 2 seconds between calls to status
await new Promise(resolve => setTimeout(resolve, 2000));
downloadJobStatus = await client.MakeFileServiceRequest({
versionHash: versionHash,
path: `/call/media/files/${jobId}`
});
console.log(`${(downloadJobStatus?.progress || 0).toFixed(1)} / 100`);
} while(downloadJobStatus?.status !== "completed");
// Download is finished, generate download url
const downloadUrl = await client.FabricUrl({
versionHash: versionHash,
call: `/media/files/${jobId}/download`,
service: "files",
queryParams: {
"header-x_set_content_disposition": `attachment; filename=${filename}`
}
});
console.log(downloadUrl);
} catch(error) {
console.error(error);
console.error(JSON.stringify(error, null, 2));
}
};
Download();