πŸžν”„λ‘œκ·Έλž˜λ°/Next.js

[Nextjs] 파일 μ—…λ‘œλ“œ(file upload)

TwoIceFish 2023. 11. 22. 00:03

ν΄λΌμ΄μ–ΈνŠΈ

const fileUpload = async (file: Blob) => {
    const formData = new FormData();
    formData.append('file', file, file.name); // 파일 이름을 λͺ…μ‹œ

    try {
        const res = await fetch('/api/upload', {
            method: 'POST',
            body: formData,
        });

        const data = await res.json();
        console.log('μ„œλ²„ 응닡:', data);
    } catch (error) {
        console.error('파일 μ—…λ‘œλ“œ 쀑 였λ₯˜:', error);
    }
};

export default fileUpload;

 

 

μ„œλ²„(api/upload/route.ts.

import { NextRequest, NextResponse } from 'next/server';
import { writeFile } from 'fs/promises';
import { join } from 'path';

export const config = {
    api: {
        bodyParser: false,
    },
};

export default async function handler(request: NextRequest, response: NextResponse) {
    console.log('μ—…λ‘œλ“œ API');

    const data = await request.formData();
    const file: File | null = data.get('file') as unknown as File;

    if (!file) NextResponse.json({ success: false });

    const bytes = await file.arrayBuffer();
    const buffer = Buffer.from(bytes);
    const path = join('/', 'tmp', file.name);

    await writeFile(path, buffer);
    console.log(`${path}}`);

    NextResponse.json('μ—…λ‘œλ“œ API');
}