Post
로 정보를 전송할 때 요청의 body
(req.body
)로 받을 수 있게 도와줌multer
을 이용한다.~// app.js에서 body-parser 설정
app.use(express.urlencoded({extended: true}));
app.use(express.json());
<input type="file" name="이름">
얘로 전송
multipart/form-data
반드시 설정!dest
: 파일을 업로드하고 그 파일이 저장될 경로를 지정하는 속성req.file
: 파일 업로드 성공 결과(파일 정보)req.body
: title
데이터 정보 확인 가능req.file
객체와 req.body
객체 확인 가능!!//multer 세부설정
const uploadDetail = multer({
// storage : 저장할 공간에 대한 정보
// diskStorage : 파일을 disk에 저장하기 위한 모든 제어기능을 제공
storage: multer.diskStorage({
destination(req, file, done){ //done : 콜백함수
// null -> 에러처리어떻게 할건지 보통 null 넣음
done(null, 'uploads/')
},
filename(req, file, done){
// ext에 파일 확장자명 저장
const ext = path.extname(file.originalname);
console.log('ext', ext);
// 파일 확장자 뺀 파일명 + 시간추가 + 다시 파일 확장자 붙여주기
done(null, path.basename(file.originalname, ext) + Date.now() + ext);
},
}),
limits: {fileSize: 5 * 1024 * 1024},
// 파일사이즈를 5MB로 제한한다.
});
storage
: 저장할 공간에 대한 정보diskstorage
: 파일을 디스크에 저장하기 위한 모든 제어 기능destination
: 파일을 저장할 경로filename
: 파일명limits
: 파일 제한filesize
: 파일 사이즈 제한array()
: 여러 파일을 업로드 할 때 사용, 하나의 요청안에 여러개의 파일이 존재할 때multiple
필수로 넣어주기request
로 요청할 때 files
로 요청하기!![] | ||
---|---|---|
파일 3개 선택 | 업로드 클릭 | 정보 넘어온거 확인, 아까 filename 설정한 것도 제대로 들어왓음! |
fields()
: 여러 파일을 업로드할 때 사용, 하나의 요청이 아닌 여러 개의 요청이 들어올 때
key:value
에서 key
는 무조건 name
이라고 value
는 내가 설정해줌single()
: 하나의 파일 업로드req.file
: 파일 하나req.body
: 나머지 정보array()
: 여러 파일을 업로드할 때 사용, 하나의 요청 안에 여러 개의 파일이 존재할 때req.files
: 파일 n개req.body
: 나머지 정보fields()
: 여러 파일을 업로드할 때 사용, 하나의 요청이 아닌 여러개의 요청이 들어올 때req.files
: 파일 n개req.body
: 나머지 정보index.js | index.ejs |
const resultBox = document.querySelector(".result");
function fileupload(){
const file = document.getElementById('dynamic-file');
// console.log(file.files[0]); //그냥 file이랑 files랑 다름
const title = document.getElementById('title')
const abc = new FormData();
// 동적 만들 때 순서 중요하다.!
// 폼 데이터 만들 때 파일은 제일 마지막에 전송한다.
// 파일이 먼저 나오면 밑에 나오는 애들은 전부 무시한다.
// index.js에 req -> file 순서로 읽어야댐
abc.append('title', title.value);
abc.append('dynamic-file', file.files[0]); //백엔드에서 받는 파일 값
axios({
//data에 아까 위에서 만든 formData를 전송한다.
method: 'POST',
url : '/dynamicFile',
data: abc,
headers: {
'Content-type': 'multipart/form-data' // FormData 형식에 맞춰서 보내준다.
},
}).then((res)=>{
console.log('res', res)
resultBox.innerHTML = `<div><img src=${res.data.path}></div>`
})
}