Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- centos
- 머클트리
- Docker
- 머클루트
- 환경변수
- 자바스크립트
- Sequelize
- 라우터
- 솔리디티
- 변수
- 리액트를 다루는 기술
- MariaDB
- 쉘스크립트
- 시퀄라이즈
- 블록체인
- 일반유저
- node.js 교과서 따라하기
- 설치
- 리액트
- 우분투
- 전역설치
- 벨로포터
- wget
- wsl
- 노드
- 깃허브
- 리눅스
- 이더리움
- npm
- immer
Archives
- Today
- Total
코드코코
210916 [6장] 6.2 자주 사용하는 미들웨어2 본문
1. multer.js
const multer = require('multer');
//multer 함수의 인수로 설정을 넣는다.
const upload = multer({
//storage속성: destination(어디)에 filename(어떤이름)으로 저장할지 넣는다.
storage: multer.diskStorage({
//매개변수
//req : 요청에 대한 정보
//file : 업로드한 파일에 대한 정보
//done(에러있으면에러,실제경로나 파일이름)
//req나 file의 데이터를 가공해서 done으로 넘기는 형식.
//현재설정으로는 uploads폴더에 [파일명+현재시간.확장자] 파일명으로 업로드.
destination(req, file, done) {
done(null, 'uploads/');
},
filename(req, file, done) {
const ext = path.extname(file.originalname);
done(null, path.basename(file.originalname, ext) + Date.now() + ext);
},
}),
//limits 속성 : 업로드에 대한 제한 사항 설정.
limits: { fileSize: 5 * 1024 * 1024 },
})
//위 설정을 사용하기 위해서는 서버에 uploads폴더가 꼭 있어야 함.
//없다면 직접 만들어주거나 다음과 같이 fs모듈을 사용해서 서버를 시작할 때 생성.
const fs = require('fs');
try {
fs.readdirSync('uploads');
} catch (error) {
console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
fs.mkdirSync('uploads');
}
//설정이 끝나면 upload변수가 생기는 데 여기에 다양한 종류의 미들웨어가 있다.
//single 미들웨어를 라우터 미들웨어 앞에 넣어두면, multer설정에 따라 파일 업로드 후 req.file객체가 생성됨.
//인수는 input 태그의 name이나 폼데이터의 키와 일치하게 넣으면 됨.
//업로드 성공 시 결과는 req.file 객체 안에, req.body에는 파일이 아닌 데이터인 title이 들어 있음
//파일을 하나만 업로드 하는 경우 single 미들웨어 사용
fs.appendFile.post('/upload', upload.single('image'), (req, res) => {
console.log(req.file, req.body);
res.send('ok');
});
//req.file 객체형식
// {
// filename: 'img'
// originalname : 'nodejs.png'
// encoding:'7bit'
// mimeType: 'image/png'
// destination:'uploads/'
// filename: 'nodejs1514.png'
// path:'uploads\\nodejs1514.png'
// size:53357
// }
//여러 파일 업로드 : html input태그에 multiple 입력, 미들웨어는 array로 교체.
//업로드 결과 req.files 배열에 있음.
app.post('/upload', upload.array('many'), (req, res) => {
console.log(req.files, req.body);
res.send('ok');
})
//fileds 미들웨어 사용 : 파일을 여러개 업로드하지만 input 태그나 폼 데이터의 키가 다른 경우
//업로드 결과 req.files.image1 과 req.files.image2에 있음.
app.post('/upload',
upload.fields([{ name: 'image1' }, { name: 'image2' }]),
(res, req) => {
console.log(req.files, req.body);
res.send('ok');
},
);
//파일을 업로드 하지 않고 멀티파트형식으로 업로드 하는 특수한 경우
//파일을 업로드 하지 않았으므로 req.body만 존재.
app.post('/upload', upload.none(), (req, res) => {
console.log(req.body);
res.send('ok');
});
2.app_ver6.js : 기존 app.js에 multer 추가
const multer = require('multer');
const fs = require('fs');
try {
fs.readdirSync('uploads');
} catch (error) {
console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
fs.mkdirSync('uploads');
}
const upload = multer({
storage: multer.diskStorage({
destination(req, file, done) {
done(null, 'uploads/');
},
filename(req, res, done) {
const ext = path.extname(file.originalname);
done(null, path.basename(file.originalname, ext) + Date.now() + ext);
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
});
app.get('/upload', (req, res) => {
res.sendFile(pathe.join(__dirname, 'multipart3.html'))
})
app.post('/upload',
upload.fields([{ name: 'image1' }, { name: 'image2' }]),
(res, req) => {
console.log(req.files, req.body);
res.send('ok');
},
);
'기록 > node.js 교과서 따라하기' 카테고리의 다른 글
210917 [7장] 7.4 데이터베이스 및 테이블 생성하기 (0) | 2021.09.17 |
---|---|
210917 [7장] 7.1-7.3 MySQL (0) | 2021.09.17 |
210916 [6장] 6.2 *미들웨어 특성 활용하기 (0) | 2021.09.16 |
210916 [6장] 6.2 자주 사용하는 미들웨어 (0) | 2021.09.16 |
210915 [6장] 6.1 익스프레스 프로젝트 시작하기 (0) | 2021.09.15 |