90 lines
2.1 KiB
TypeScript
90 lines
2.1 KiB
TypeScript
import { CUSTOM_HEADER_SITE_ID_KEY, EDITOR_LOAD_IMAGE_URL } from '@constants'
|
|
import { SERVER_API_URL, SITE_ID } from '@constants/env'
|
|
import axios from 'axios'
|
|
import multer from 'multer'
|
|
import { NextApiRequest, NextApiResponse } from 'next'
|
|
|
|
const upload = multer({
|
|
storage: multer.memoryStorage(),
|
|
})
|
|
|
|
const initMiddleware = (middleware: any) => {
|
|
return (req: NextApiRequest, res: NextApiResponse) =>
|
|
new Promise((resolve, reject) => {
|
|
middleware(req, res, result => {
|
|
if (result instanceof Error) {
|
|
return reject(result)
|
|
}
|
|
return resolve(result)
|
|
})
|
|
})
|
|
}
|
|
|
|
// for parsing multipart/form-data
|
|
// editor 요청인 경우 무조건 single임
|
|
const multerAny = initMiddleware(upload.single('upload'))
|
|
|
|
type NextApiRequestWithFormData = NextApiRequest & {
|
|
file: Express.Multer.File
|
|
}
|
|
|
|
export const config = {
|
|
api: {
|
|
bodyParser: false,
|
|
},
|
|
}
|
|
|
|
export default async (
|
|
req: NextApiRequestWithFormData,
|
|
res: NextApiResponse,
|
|
) => {
|
|
await multerAny(req, res)
|
|
|
|
//첨부파일 base64 endoding -> 서버에서 decoding 필요
|
|
if (req.file.size > 300000) {
|
|
res.status(501).json({ message: 'File is too big!! 😵💫' })
|
|
return
|
|
}
|
|
|
|
const base64Encoding = req.file.buffer.toString('base64')
|
|
|
|
const body = {
|
|
fieldName: req.file.fieldname,
|
|
originalName: req.file.originalname,
|
|
fileType: req.file.mimetype,
|
|
size: req.file.size,
|
|
fileBase64: base64Encoding,
|
|
}
|
|
|
|
//headers
|
|
let editorHeaders = {
|
|
'Content-Type': 'application/json',
|
|
}
|
|
editorHeaders[CUSTOM_HEADER_SITE_ID_KEY] = SITE_ID
|
|
|
|
// const cookies = new Cookies(req, res)
|
|
// const authToken = cookies.get(ACCESS_TOKEN)
|
|
// // header에 authentication 추가
|
|
// if (authToken) {
|
|
// editorHeaders[CLAIM_NAME] = authToken
|
|
// }
|
|
|
|
const result = await axios.post(
|
|
`${SERVER_API_URL}/portal-service/api/v1/upload/editor`,
|
|
body,
|
|
{
|
|
headers: editorHeaders,
|
|
},
|
|
)
|
|
|
|
let data = {}
|
|
if (result) {
|
|
data = {
|
|
...result.data,
|
|
url: `${SERVER_API_URL}${EDITOR_LOAD_IMAGE_URL}${result.data.url}`,
|
|
}
|
|
}
|
|
|
|
res.status(200).json(data)
|
|
}
|