Compare commits
No commits in common. "553a259c1fc4f09e14bc4ab0569898f225d91b32" and "11edbe19883e7034f58673dabc38def0179fd1a2" have entirely different histories.
553a259c1f
...
11edbe1988
@ -39,7 +39,6 @@
|
|||||||
"react-responsive-modal": "^6.4.2",
|
"react-responsive-modal": "^6.4.2",
|
||||||
"react-select": "^5.8.1",
|
"react-select": "^5.8.1",
|
||||||
"recoil": "^0.7.7",
|
"recoil": "^0.7.7",
|
||||||
"sharp": "^0.33.5",
|
|
||||||
"sqlite": "^5.1.1",
|
"sqlite": "^5.1.1",
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"sweetalert2": "^11.14.1",
|
"sweetalert2": "^11.14.1",
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
import { NextResponse } from 'next/server'
|
|
||||||
import { S3Client, PutObjectCommand, DeleteObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3'
|
|
||||||
import sharp from 'sharp'
|
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
|
||||||
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 checkArea = (obj) => {
|
|
||||||
const { width, height, left, top } = obj
|
|
||||||
|
|
||||||
if (left < 0 || top < 0 || width > 1600 || height > 1000) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
const cropImage = async (Key, width, height, left, top) => {
|
|
||||||
try {
|
|
||||||
const checkResult = checkArea({ width, height, left, top })
|
|
||||||
|
|
||||||
// Get the image from S3
|
|
||||||
const { Body } = await s3.send(
|
|
||||||
new GetObjectCommand({
|
|
||||||
Bucket,
|
|
||||||
Key,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
// Convert stream to buffer
|
|
||||||
const chunks = []
|
|
||||||
for await (const chunk of Body) {
|
|
||||||
chunks.push(chunk)
|
|
||||||
}
|
|
||||||
const imageBuffer = Buffer.concat(chunks)
|
|
||||||
|
|
||||||
let processedImage
|
|
||||||
if (!checkResult) {
|
|
||||||
processedImage = await sharp(imageBuffer).toBuffer()
|
|
||||||
} else {
|
|
||||||
processedImage = await sharp(imageBuffer)
|
|
||||||
.extract({
|
|
||||||
width: parseInt(width),
|
|
||||||
height: parseInt(height),
|
|
||||||
left: parseInt(left),
|
|
||||||
top: parseInt(top),
|
|
||||||
})
|
|
||||||
.png()
|
|
||||||
.toBuffer()
|
|
||||||
}
|
|
||||||
return processedImage
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error processing image:', error)
|
|
||||||
throw error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function POST(req) {
|
|
||||||
try {
|
|
||||||
const formData = await req.formData()
|
|
||||||
const file = formData.get('file')
|
|
||||||
const objectNo = formData.get('objectNo')
|
|
||||||
const planNo = formData.get('planNo')
|
|
||||||
const type = formData.get('type')
|
|
||||||
const width = formData.get('width')
|
|
||||||
const height = formData.get('height')
|
|
||||||
const left = formData.get('left')
|
|
||||||
const top = formData.get('top')
|
|
||||||
|
|
||||||
const OriginalKey = `Drawing/${uuidv4()}`
|
|
||||||
|
|
||||||
// Upload original image
|
|
||||||
await s3.send(
|
|
||||||
new PutObjectCommand({
|
|
||||||
Bucket,
|
|
||||||
Key: OriginalKey,
|
|
||||||
Body: Buffer.from(await file.arrayBuffer()),
|
|
||||||
ContentType: 'image/png',
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
// Process the image
|
|
||||||
const bufferImage = await cropImage(OriginalKey, width, height, left, top)
|
|
||||||
|
|
||||||
const Key = `Drawing/${objectNo}_${planNo}_${type}`
|
|
||||||
|
|
||||||
// Upload processed image
|
|
||||||
await s3.send(
|
|
||||||
new PutObjectCommand({
|
|
||||||
Bucket,
|
|
||||||
Key,
|
|
||||||
Body: bufferImage,
|
|
||||||
ContentType: 'image/png',
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
await s3.send(
|
|
||||||
new DeleteObjectCommand({
|
|
||||||
Bucket,
|
|
||||||
Key: OriginalKey,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
const result = {
|
|
||||||
filePath: `https://${process.env.AMPLIFY_BUCKET}.s3.${process.env.AWS_REGION}.amazonaws.com/${Key}`,
|
|
||||||
fileName: Key,
|
|
||||||
}
|
|
||||||
|
|
||||||
return NextResponse.json(result)
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error in POST:', error)
|
|
||||||
return NextResponse.json({ error: 'Failed to process and upload image' }, { status: 500 })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -48,15 +48,13 @@ export async function POST(req) {
|
|||||||
export async function DELETE(req) {
|
export async function DELETE(req) {
|
||||||
try {
|
try {
|
||||||
const searchParams = req.nextUrl.searchParams
|
const searchParams = req.nextUrl.searchParams
|
||||||
const fileName = searchParams.get('fileName')
|
const Key = `upload/${searchParams.get('fileName')}`
|
||||||
|
console.log('🚀 ~ DELETE ~ Key:', Key)
|
||||||
|
|
||||||
if (!fileName) {
|
if (!Key) {
|
||||||
return NextResponse.json({ error: 'fileName parameter is required' }, { status: 400 })
|
return NextResponse.json({ error: 'fileName parameter is required' }, { status: 400 })
|
||||||
}
|
}
|
||||||
|
|
||||||
const Key = `upload/${fileName}`
|
|
||||||
console.log('🚀 ~ DELETE ~ Key:', Key)
|
|
||||||
|
|
||||||
await s3.send(
|
await s3.send(
|
||||||
new DeleteObjectCommand({
|
new DeleteObjectCommand({
|
||||||
Bucket,
|
Bucket,
|
||||||
|
|||||||
@ -79,8 +79,7 @@ export function useImgLoader() {
|
|||||||
|
|
||||||
/** 이미지 크롭 요청 */
|
/** 이미지 크롭 요청 */
|
||||||
const result = await post({
|
const result = await post({
|
||||||
// url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/canvas`,
|
url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/canvas`,
|
||||||
url: `http://localhost:3000/api/image/canvas`,
|
|
||||||
data: formData,
|
data: formData,
|
||||||
})
|
})
|
||||||
console.log('🚀 ~ handleCanvasToPng ~ result:', result)
|
console.log('🚀 ~ handleCanvasToPng ~ result:', result)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user