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 |
Tags
- js
- UI
- https://dasima.xyz/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%9C%EA%B3%B1-math-pow-%EA%B3%84%EC%82%B0/
- JS#3일차달리자#초반인데#시간금방~
- redux상태유지
- toString#String
- ㄷㅌ
- 헷갈린다~
- 자바스크립트
- Beesbeesbees
- 자바스크립트#JS#var#let#const#undefined#null
- slice/splice/split
- 자바스크립트#조건문#문자열
- https://developer-talk.tistory.com/299
- 자바스크립트#JS#slice#splice
- 노드교과서
- @redux-toolkit
- UX
- children vs childrenNodes
- dom
- CSS
- for~in/for~of
- https://lo-victoria.com/introduction-to-redux-toolkit-for-beginners
- 내장고차함수
- https://www.daleseo.com/js-array-slice-splice/
- react
- User Flow
- variable#function
- cmarket
- removeCookie
Archives
- Today
- Total
Daily Front_Minhhk
express [multer] 파일 업로드! 본문
multer?
- 멀티파트 형식으로 업로드할 때 사용하는 미들웨어
- enctype이 multipart/form-data인 폼을 통해 업로드하는 데이터의 형식
multipart.html
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="text" name="title" />
<button type="submit">업로드</button>
</form>
// 다중 파일 일 떈?
<form id="form" action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="many" multiple />
<input type="text" name="title" />
<button type="submit">업로드</button>
</form>
npm i multer -> multer를 설치하고!
const multer = require('multer');
const upload = multer({
storage: multer.diskStorage({
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: { fileSize: 5 * 1024 * 1024 },
});
어디에(destination)
어떤 이름으로(filename) 저장할지 설정.
파일 용량 제한 (limits) -> 현재 코드에서는 5MB
req 매개변수에는 요청에 대한 정보 -> destination
업로드한 파일에 대한 정보 -> filename
uploads 폴더를 생성 한 뒤
const fs = require('fs');
try {
fs.readdirSync('uploads');
} catch (error) {
console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
fs.mkdirSync('uploads');
}
아래의 미들웨어를 적용하자
app.post('/upload', upload.single('image'), (req, res) => {
console.log(req.file, req.body);
res.send('ok');
});
// 다중 파일 일 때는? upload.array() 로 변경하자!
app.post('/upload', upload.array('many'), (req, res) => {
console.log(req.files, req.body);
res.send('ok');
});
업로드 성공 시 결과는 req.file 객체 안에 들어 있으며, req.body에는 파일이 아닌 데이터인 title이 있다.
파일을 업로드하지 않고도 멀티파트 형식으로 업로드하는 경우가 있습니다. 그럴 때는 none 미들웨어를 사용!
<form id="form" action="/upload" method="post" enctype="multipart/form-data">
<input type="text" name="title" />
<button type="submit">업로드</button>
</form>
app.js
app.post('/upload', upload.none(), (req, res) => {
console.log(req.body);
res.send('ok');
});
아래는 전체 코드이다!
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, file, 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(path.join(__dirname, 'multipart.html'));
});
app.post('/upload', upload.single('image'), (req, res) => {
console.log(req.file);
res.send('ok');
});
'Study > Node.js' 카테고리의 다른 글
express [req,res] 종류 (0) | 2023.10.08 |
---|---|
express 라우터 분리하기, 라우트 매개변수 (0) | 2023.10.08 |
express [morgan, bodyParser, cookieParser, express-session] (0) | 2023.10.08 |
express 시작__미들웨어 app.use() (0) | 2023.10.05 |