Bansari Akhani
activity logs and change S3 piblic access to signed urls
637e633
import multer from 'multer';
import AWS from 'aws-sdk';
import { GenerateDownloadUrlParams, GenerateSignedUrlParams } from 'shared/interfaces/s3.interface';
export const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: process.env.AWS_REGION,
});
const storage = multer.memoryStorage();
const upload = multer({ storage });
export const multipleUpload = upload.array('files');
export const generateSignedUrl = async ({
bucketName,
objectKey,
expiration = 3600,
contentType = 'application/octet-stream',
}: GenerateSignedUrlParams): Promise<string> => {
const params = {
Bucket: bucketName,
Key: objectKey,
Expires: expiration,
ContentType: contentType,
};
try {
const url = await s3.getSignedUrlPromise('putObject', params);
return url;
} catch (err) {
console.error('Error generating signed URL', err);
throw err;
}
};
export const generateDownloadUrl = async ({
bucketName,
objectKey,
expiration = 60 * 60 * 24 * 365 * 10 // URL EXPIRY is set to 10 years for now, TODO: change the logic in frontend to get file download url run time
}: GenerateDownloadUrlParams): Promise<string> => {
const params = {
Bucket: bucketName,
Key: objectKey,
Expires: expiration,
};
try {
const url = await s3.getSignedUrlPromise('getObject', params);
return url;
} catch (err) {
console.error('Error generating signed URL', err);
throw err;
}
};