Spaces:
Runtime error
Runtime error
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; | |
} | |
}; | |