From 157d9fe99c35537bb1d2f33d55dd688742e802de Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Wed, 12 Jun 2024 13:35:23 +0000 Subject: [PATCH] Object auto delete when upload --- src/lib/server/s3.ts | 18 ++++++++++++++++++ src/routes/api/upload/+server.ts | 9 +++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/lib/server/s3.ts b/src/lib/server/s3.ts index b9ca7b34..5f50a7c5 100644 --- a/src/lib/server/s3.ts +++ b/src/lib/server/s3.ts @@ -1,5 +1,6 @@ import { CreateBucketCommand, + DeleteObjectCommand, HeadBucketCommand, PutBucketPolicyCommand, PutObjectCommand, @@ -119,3 +120,20 @@ export const uploadObject = async ( throw error; } }; + +export const deleteObject = async (bucketName: string, fileName: string) => { + const deleteObjectCommand = new DeleteObjectCommand({ + Bucket: bucketName, + Key: fileName, + }); + + try { + await s3Client.send(deleteObjectCommand); + } catch (error) { + console.error( + `Error uploading file ${fileName} to bucket ${bucketName}:`, + error + ); + throw error; + } +}; diff --git a/src/routes/api/upload/+server.ts b/src/routes/api/upload/+server.ts index 09d40cab..4b685a07 100644 --- a/src/routes/api/upload/+server.ts +++ b/src/routes/api/upload/+server.ts @@ -1,6 +1,6 @@ // src/routes/api/upload.js -import { ensureBucketExists, uploadObject } from "$lib/server/s3"; +import { deleteObject, ensureBucketExists, uploadObject } from "$lib/server/s3"; import type { RequestEvent } from "@sveltejs/kit"; import { generateId } from "lucia"; @@ -8,7 +8,7 @@ export async function POST(event: RequestEvent): Promise { try { const contentType = event.request.headers.get("content-type") ?? ""; const fileExtension = contentType.split("/").pop(); - const fileName = `${generateId(25)}.${fileExtension}`; + const fileName = `${generateId(50)}.${fileExtension}`; const bucket = event.request.headers.get("bucket") as string; if (!fileExtension || !fileName) { @@ -49,6 +49,11 @@ export async function POST(event: RequestEvent): Promise { await ensureBucketExists(bucket); + if (event.locals.user?.icon) { + const key: string = event.locals.user.icon.split("/").pop() as string; + await deleteObject(bucket, key); + } + const objectUrl = await uploadObject( bucket, fileName,