Generate presigned URL - React
You have the option to create presigned URL, allowing you to upload your recordings to AWS, Azure, or GCP securely. presigned URL provide a secure and temporary way to upload objects to your cloud storage. Instead of sharing your entire credentials, you can create a special URL that allows uploading a specific file for a limited time.
important
Code Sample
This guide will walk you through the process of generating a presigned URL for uploading recordings to your cloud storage of choice. You can use this generated presigned URL in Start Recording API.
- AWS
- AZURE
- GCP
const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
import fetch from 'node-fetch';
const region = <YOUR S3 REGION>;
const bucket = <YOUR S3 BUCKET NAME>;
const key = <YOUR FILE NAME>; // test/abc.mp4
const accessKeyId = <YOUR S3 ACCESS KEY ID>;
const secretAccessKey = <YOUR S3 SECRET ACCESS KEY>;
const expiresIn = <URL EXPIRY IN SECONDS>; // this number should be higher than duraion of recording
const s3Client = new S3Client({
credentials: {
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey,
},
region: region,
});
const createPresignedUrlWithClient = async () => {
const command = new PutObjectCommand({ Bucket: bucket, Key: key });
const preSignedUrl = await getSignedUrl(s3Client, command, { expiresIn: expiresIn });
return preSignedUrl;
};
// you can use this presigned url like this
async function main() {
let preSignedUrl = await createPresignedUrlWithClient();
const options = {
method: "POST",
headers: {
Authorization: "$YOUR_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
roomId: "abcd-efgh-ijkl",
preSignedUrl: preSignedUrl
}),
};
const url = `https://api.videosdk.live/v2/recordings/start`;
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
}
main();
const { BlobServiceClient, BlobSASPermissions } = require("@azure/storage-blob");
import fetch from 'node-fetch';
const connectionString = <YOUR AZURE STORAGE CONNECTION STRING>;
const containerName = <YOUR AZURE CONTAINER NAME>;
const blobName = <YOUR AZURE BLOB NAME>;
const startsOn = <YOUR SASURL START TIME>; // (optional, defaults to now)
const expiresOn = <YOUR SASURL EXPIRY TIME>; // expiry time should be higher than duration of recording
const generateSASUrl = async () => {
let blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);
let containerClient = blobServiceClient.getContainerClient(containerName);
await containerClient.createIfNotExists({
access: "container",
});
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const sasUrl = await blockBlobClient.generateSasUrl({
startsOn: startsOn, // sasUrl start time
expiresOn: expiresOn, // sasUrl expiration time
permissions: BlobSASPermissions.parse("write"),
});
return sasUrl;
};
// you can use this presigned url like this
async function main() {
let preSignedUrl = await generateSASUrl();
const options = {
method: "POST",
headers: {
Authorization: "$YOUR_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
roomId: "abcd-efgh-ijkl",
preSignedUrl: preSignedUrl
}),
};
const url = `https://api.videosdk.live/v2/recordings/start`;
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
}
main();
const { Storage } = require("@google-cloud/storage");
import fetch from 'node-fetch';
const projectId = <YOUR GCP PROJECT ID>;
const clientEmail = <YOUR GCP CLIENT EMAIL>;
const privateKey = <YOUR GCP PRIVATE KEY>;
const expires =<URL EXPIRY IN SECONDS>; // this number should be higher than duraion of recording
const bucketName = <YOUR GCP BUCKET NAME>;
const fileName = <YOUR FILE NAME>; // test/abc.mp4
const storage = new Storage({
projectId: projectId,
credentials: {
client_email: clientEmail,
private_key: privateKey,
},
});
const generateSignedUrl = async () => {
const options = {
version: "v4",
action: "write",
expires: expires,
contentType: "video/mp4",
};
const [signedUrl] = storage.bucket(bucketName).file(fileName).getSignedUrl(options);
return signedUrl;
};
// you can use this presigned url like this
async function main() {
let preSignedUrl = await generateSignedUrl();
const options = {
method: "POST",
headers: {
Authorization: "$YOUR_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
roomId: "abcd-efgh-ijkl",
preSignedUrl: preSignedUrl
}),
};
const url = `https://api.videosdk.live/v2/recordings/start`;
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
}
main();
API Reference
The API references for all the methods utilized in this guide are provided below.
Got a Question? Ask us on discord