73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
import { NextResponse } from 'next/server'
|
|
import { S3Client, PutObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3'
|
|
|
|
const Bucket = process.env.AMPLIFY_BUCKET
|
|
const s3 = new S3Client({
|
|
region: process.env.AWS_REGION,
|
|
credentials: {
|
|
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
},
|
|
})
|
|
|
|
const uploadImage = async (file) => {
|
|
const Body = Buffer.from(await file.arrayBuffer())
|
|
const Key = `upload/${file.name}`
|
|
const ContentType = file.ContentType
|
|
|
|
await s3.send(
|
|
new PutObjectCommand({
|
|
Bucket,
|
|
Key,
|
|
Body,
|
|
ContentType,
|
|
}),
|
|
)
|
|
|
|
return {
|
|
filePath: `https://${process.env.AMPLIFY_BUCKET}.s3.${process.env.AWS_REGION}.amazonaws.com/${Key}`,
|
|
fileName: Key,
|
|
}
|
|
}
|
|
|
|
export async function POST(req) {
|
|
try {
|
|
const formData = await req.formData()
|
|
const file = formData.get('file')
|
|
|
|
const result = await uploadImage(file)
|
|
result.message = '이미지 업로드 성공'
|
|
|
|
return NextResponse.json(result)
|
|
} catch (error) {
|
|
console.error(error)
|
|
return NextResponse.json({ error: 'Failed to upload image' }, { status: 500 })
|
|
}
|
|
}
|
|
|
|
export async function DELETE(req) {
|
|
try {
|
|
const searchParams = req.nextUrl.searchParams
|
|
const fileName = searchParams.get('fileName')
|
|
|
|
if (!fileName) {
|
|
return NextResponse.json({ error: 'fileName parameter is required' }, { status: 400 })
|
|
}
|
|
|
|
const Key = `upload/${fileName}`
|
|
console.log('🚀 ~ DELETE ~ Key:', Key)
|
|
|
|
await s3.send(
|
|
new DeleteObjectCommand({
|
|
Bucket,
|
|
Key,
|
|
}),
|
|
)
|
|
|
|
return NextResponse.json({ message: '이미지 삭제 성공' }, { status: 200 })
|
|
} catch (error) {
|
|
console.error('S3 Delete Error:', error)
|
|
return NextResponse.json({ error: 'Failed to delete image' }, { status: 500 })
|
|
}
|
|
}
|