diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-11-02 22:28:41 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-11-02 22:28:41 +0100 |
| commit | 08b55c6db901910dd0540a45257122f9450cbe0a (patch) | |
| tree | 155d28d3ff1b669add11879809d04f6b57071e92 /src/index.js | |
Add code
Diffstat (limited to 'src/index.js')
| -rw-r--r-- | src/index.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..bae1fc0 --- /dev/null +++ b/src/index.js @@ -0,0 +1,49 @@ +const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3'); + +module.exports.handler = async (event) => { + const data = Buffer.from(event.body, 'base64'); + let fileExtension; + const contentType = event.headers['Content-Type'] || event.headers['content-type']; + switch (contentType) { + case 'image/gif': + fileExtension = 'gif'; + break; + case 'video/mp4': + fileExtension = 'mp4'; + break; + default: + return { + statusCode: 400, + body: 'Invalid Content-Type. Expected image/gif or video/mp4.', + }; + } + + const filename = `${Date.now().toString()}.${fileExtension}`; + + const client = new S3Client({}); + const command = new PutObjectCommand({ + Bucket: process.env.S3_BUCKET, + Key: filename, + Body: data, + ACL: 'public-read', + ContentType: contentType + }); + + try { + await client.send(command); + + return { + statusCode: 201, + body: JSON.stringify({ + url: `https://${process.env.DOMAIN_NAME}/${filename}` + }), + }; + } catch (error) { + console.error(error); + + return { + statusCode: 500, + body: JSON.stringify({ message: 'Error uploading file.' }), + }; + } +}; |