Skip to content

multer #15

@ntdotjsx

Description

@ntdotjsx
import multer from 'multer'
import { defineEventHandler, callNodeListener } from 'h3'
import User from '~/server/models/user.model'

const upload = multer({
  storage: multer.diskStorage({
    destination: 'public/uploads',
    filename: (_, file, cb) =>
      cb(null, `${Date.now()}-${file.originalname}`)
  }),
  fileFilter: (_, file, cb) =>
    cb(null, file.mimetype.startsWith('image/')),
})

export default defineEventHandler(async (event) => {
  await callNodeListener(
    // @ts-expect-error Nuxt 3
    upload.single('avatar'),
    event.node.req,
    event.node.res
  )

  const file = event.node.req.file
  if (!file) throw createError({ statusCode: 400, statusMessage: 'No file' })

  const userId = event.context.userId // หรือรับจาก body / params
  const avatarPath = `/uploads/${file.filename}`

  await User.findByIdAndUpdate(userId, { avatar: avatarPath })

  return { avatar: avatarPath }
})```

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions