export default defineEventHandler(async (event) => { const form = await readMultipartFormData(event) if (!form?.length) { throw createError({ statusCode: 400, statusMessage: 'Expected an image upload' }) } const fields: Record = {} let image: { filename: string; data: Buffer; type?: string } | null = null for (const part of form) { if (part.name === 'image' && part.filename && part.data?.length) { image = { filename: part.filename, data: part.data, type: part.type } } else if (part.name && part.data) { fields[part.name] = part.data.toString('utf8') } } if (!image) { throw createError({ statusCode: 400, statusMessage: 'An image is required' }) } const { owner } = assertLibraryOwner(event) const library = publicLibrary(event) const folderId = library.folders.some(folder => folder.id === fields.folderId) ? fields.folderId : library.folders[0]?.id if (!folderId) { throw createError({ statusCode: 400, statusMessage: 'Create a library folder first' }) } assertFolderExists(event, folderId) const still = await saveStill({ ownerKey: owner, folderId, filename: image.filename, data: image.data, width: Number(fields.width || 0), height: Number(fields.height || 0), hideInput: fields.hideInput === 'true', role: 'input' }) return { still: still || undefined, ...publicLibrary(event) } })