diff --git a/src/lib/server/s3.ts b/src/lib/server/s3.ts index b9ca7b3..5f50a7c 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 09d40ca..4b685a0 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,