기본적으로 이미지 업로드 기능을 제공한다.
하지만 굉장히 용량이 작은 사이즈만 업로드가 되는 것 같았다. 기준은 정확히 모르겠다.
React | Next.js
구글링해보니 기존의 Image Import Hook을 제거한 후 새롭게 저장할 Image Import Hook을 생성하는 방식으로 사용하고 있었다.
useEffect(() => {
if (editorRef.current) {
// 기존 Image Import Hook 제거
editorRef.current.getInstance().removeHook("addImageBlobHook");
// 새 Image Import Hook 생성
editorRef.current.getInstance().addHook("addImageBlobHook", (blob, callback) => {
(async () => {
const formData = new FormData();
formData.append("img", blob);
const { data: filename } = await Axios.post(
// 서버에 저장할 로직을 수행하는 API호출
`${process.env.NEXT_PUBLIC_API_URL}`,
formData,
{ header: { "content-type": "multipart/formdata" } },
);
// 이미지가 저장될 서버 경로
const imageUrl = `${process.env.NEXT_PUBLIC_IMAGE_URL}edit/${filename.filename}`;
// 미리보기 이미지를 가져옴
callback(imageUrl, "image");
})();
return false;
});
}
}, [editorRef]);
파일을 formData에 담아서 API호출하여 서버로 보낸다.
이 때 formData는 console.log()로 바로 확인되지 않고 빈 객체가 출력되어 제대로 들어간건지 알 수가 없는데,
아래의 코드를 사용하면 확인할 수 있다.
for (var key of formData.keys()) {
console.log(key);
}
for (var value of formData.values()) {
console.log(value);
}
https://stackoverflow.com/questions/17066875/how-to-inspect-formdata
그리고 이미지를 서버에 업로드하게되면 미리보기 샘플을 가져온다.
위와 같이 에디터내에 미리보기 이미지가 생성됨 ㅎㅎ
크기 조절 기능은 나는 따로 생성하진 않고 그냥 게시글이 작성되면 강제로 width: 100%로 보여지게 css를 설정해두었다. (일단은..;)
Node.js
파일 업로드를 위해 multer 라이브러리를 사용한다.
npm install --save multer
const multer = require("multer");
const upload = multer({
dest: "이미지가 저장될 경로",
limits: { fileSize: 5*1024*1024 }, // option
});
router.post("/api/fileupload", upload.single("img"), (req, res) => {
res.json(req.file);
});
위의 코드를 통해 multer의 upload.single에서 formData안의 name이 "img"인 파일을 인식하여 저장해준다.
이때 이름이 같지 않으면 Unexpected field at makeError 에러가 나온다.
이상태로는 이름을 보고 이미지파일을 구분할수는 없겠지만 저장은 잘 된다.
굳이 구분할 필요가 없어 놔두긴 했지만 파일 이름에 업로드시간 정도를 추가하여 중복이 발생하지 않도록 만들어두면 좋긴 하겠다.
추가)
여러개의 파일저장 https://www.zerocho.com/category/NodeJS/post/5950a6c4f7934c001894ea83
파일명/경로 수정 https://donghunee.github.io/study/2019/07/25/nodeimg/
'main > Node.js' 카테고리의 다른 글
[Node] API 통신용 포트에도 SSL 적용시키기 (0) | 2022.02.04 |
---|---|
[MySQL | Javascript] query return값 받아서 저장하고 사용하는 방법 (0) | 2021.11.15 |
[Node] 회원가입 시 이메일 발송하기 - 구글 계정으로 nodemailer 사용 (0) | 2021.08.25 |
[Node] path, __dirname 사용하기 / ReferenceError: path is not defined ERROR (0) | 2021.07.27 |