자 그럼 어떤 오류가 나왔고 어떻게 해결했는지 지금 공개하겠다 !! 시작~~~ 합니다!!!!!!!!
(구현 완료된 코드)
const express = require("express")
const router = express.Router()
const multer = require("multer");
const { ObjectID } = require("mongodb");
const { Readable } = require("stream");
const { createModel } = require("mongoose-gridfs");
/**
* POST /video
*/
router.post("/", (req, res) => {
const storage = multer.memoryStorage()
const upload = multer({ storage: storage, limits: { fields: 1, files: 1 }});
upload.single("file")(req, res, (err) => {
if (err) {
return res.status(400).json({ message: err });
} else if(!req.body.name) {
return res.status(400).json({ message: "파일 이름을 작성해주세요!" });
}
const readStream = Readable.from(req.file.buffer);
const options = ({ filename: req.body.name, contenttype: "video/mp4"});
Attachment = createModel();
Attachment.write(options, readStream, (err, file) => {
if (err)
return res.status(400).json({message: "Bad Request"});
else {
console.log("보내졌어요! \n" + file.toString());
return res.status(200).json({
message: "정상적으로 저장되었습니다!",
file: file,
});
}
})
});
});
});
module.exports = router
크게 달라진거는 없지만 어제 나온 에러중에 LIMIT_UNEXPECTED_FILE 이라는 아이가 있었다. 저거는 손쉽게 upload.single("track") 이라고 어제 코드에는 되어있었다. 하지만!! 선더클라이언트로 돌릴때에는 이름을 file로 했어서... 이름이 안맞으니까 저렇게 나오지 ㅎ
위에 두 개 차이 보이시죠잉?
그 다음 선더클라이언트로 돌려보자.!
.... 여전히 돌아가지는 않지만 ... 그래도 다른 오류메세지가 나왔다. 검색해보니까 fileSize 와 parts는 안적혀 있으면 디폴트 값으로 들어간다고 나와 있어서 (물론 그럼 파일 사이즈가 무제한이라 이거는 나중에 제한을 둬야할거 같다.) 두 단어를 빼주고
const upload = multer({ storage: storage, limits: { fields: 1, files: 1 }});
요렇게 두개 ! files 안에는 선더클라이언트의 res 값이 들어가 있고, chunks에는 분할된 파일들이 들어간다. 한번 봐보자