next/server/api/upload/avatar.post.ts

37 lines
755 B
TypeScript

import { v4 } from "uuid";
import { resolve } from "path";
import { isLoggedIn } from "@server/middlewareButNotReally";
import sharp from "sharp";
import { User } from "@models/user";
export default eventHandler(async (ev) => {
isLoggedIn(ev);
let mpd = await readMultipartFormData(ev);
if (!mpd) {
throw createError({
statusCode: 400,
});
}
let si = sharp(mpd[0].data!);
let nn = v4();
await si
.resize({
height: 500,
width: 500,
fit: "outside",
background: { r: 0, g: 0, b: 0, alpha: 0 },
})
.toFormat("png")
.toFile(resolve(`public/avatars/${nn}.png`));
await User.findByIdAndUpdate(ev.context.currentUser!._id, {
$set: {
"profile.avatar": nn,
},
});
return {
success: true,
file: `${nn}.png`,
};
});