From 4fb41bde46c32194edf11f41df657a99f5357005 Mon Sep 17 00:00:00 2001 From: amel Date: Wed, 22 Jan 2025 14:52:38 +0800 Subject: [PATCH] upd: edit profile - Deskripsi: - resize image 300px No Issues --- bun.lockb | Bin 286217 -> 286177 bytes package.json | 1 + src/app/api/user/profile/route.ts | 20 ++++++++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index 9bb5d6ff1ca693d3fe4775ac8747eb31103aa4b2..0b76528c24115ae96e64878c65de73466d679c9e 100755 GIT binary patch delta 12966 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 SPCtLiN&V;aA5$`a-G2h0@Yu=# delta 13191 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 diff --git a/package.json b/package.json index 35dedb1..86623f1 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "readdirp": "^3.6.0", "recharts": "2", "rrule": "^2.8.1", + "sharp": "^0.33.5", "supabase": "^1.192.5", "web-push": "^3.6.7", "wibu-cli": "^1.0.91", diff --git a/src/app/api/user/profile/route.ts b/src/app/api/user/profile/route.ts index 4676f6e..3a27995 100644 --- a/src/app/api/user/profile/route.ts +++ b/src/app/api/user/profile/route.ts @@ -3,6 +3,7 @@ import { funGetUserByCookies } from "@/module/auth"; import { createLogUser } from "@/module/user"; import _ from "lodash"; import { NextResponse } from "next/server"; +import sharp from "sharp"; // GET PROFILE BY COOKIES @@ -119,9 +120,24 @@ export async function PUT(request: Request) { if (String(file) != "undefined" && String(file) != "null") { const fExt = file.name.split(".").pop() const fileName = user.id + '.' + fExt; - const newFile = new File([file], fileName, { type: file.type }); + + // Resize ukuran + const imageBuffer = await file.arrayBuffer(); + const resize = await sharp(imageBuffer).resize(300).toBuffer(); + + // Convert buffer ke Blob + const blob = new Blob([resize], { type: file.type }); + + // Convert Blob ke File + const resizedFile = new File([blob], fileName, { + type: file.type, + lastModified: new Date().getTime(), + }); + + // const newFile = new File([file], fileName, { type: file.type }); + await funDeleteFile({ fileId: String(update.img) }) - const upload = await funUploadFile({ file: newFile, dirId: DIR.user }) + const upload = await funUploadFile({ file: resizedFile, dirId: DIR.user }) if (upload.success) { await prisma.user.update({ where: {