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
- mainapplication.kt
- extends
- meatadata
- map
- 타입스크립트
- generic
- async
- set
- app.post
- 페이지네이션
- TS
- 글또10기
- 이진탐색
- interface
- supabase 페이지네이션
- Next.js
- javascript
- 상속
- Filter
- 리액트네이티브아이콘
- reactnative
- 안드로이드빌드에러
- 배열중복요소제거
- 스크롤이벤트
- materialicons
- Spring
- array
- 슬라이딩윈도우
- app:compiledebugkotlin
- react
Archives
- Today
- Total
rhanziy
node.js - multer로 이미지 업로드(diskStorage) 본문
Multer는 파일 업로드를 위해 사용되는 Node.js의 미들웨어!
multipart/form-data 형식으로 단일 및 다중 파일 업로드를 지원하기 때문에 가장 많이 사용된다.
- https://www.npmjs.com/package/multer
- https://github.com/expressjs/multer/blob/master/doc/README-ko.md (한국어)
설치/셋팅 - server.js
// npm install multer
// 이미지 업로드 라이브러리.
let multer = require('multer');
저장할 disk storage 설정
let ff
var storage = multer.diskStorage({
destination : function(req, file, cb){
cb(null, './public/images');
},
filename : function(req, file, cb){
// 한글깨짐현상 방지
ff = file
ff.originalname = Buffer.from(file.originalname, "latin1").toString("utf8");
cb(null, Date.now() +"_"+ ff.originalname);
},
filefilter : function(req, file, cb){
var ext = path.extname(file.originalname);
if(ext !== '.png' && ext !== '.jpg' && ext !== '.jpeg'){
return callback(new Error('PNG, JPG 확장자만 업로드 가능합니다.'));
}
callback(null, true)
},
limits : {
fileSize : 1024 * 1024
}
});
var upload = multer({storage : storage});
옵션 설명
- destination 에 업로드 이미지 저장경로를 설정
- filename : 업로드 한 image파일 이름 설정. 보통 중복이름 방지를 위해 date를 추가해준다.
- filefilter : 파일 확장자 제한
- limits : 파일 크기 제한
🔽 input tyle file의 accept 속성으로 file open 창에서 확장자 제한가능
더보기
<input type="file" id="file" name="file" accept=".jpg, .jpeg, .png" class="form-control mt-1" multiple>
문법
<input type="file" accept="파일 확장자|audio/*|video/*|image/*|미디어 타입"> |
속성값 설명
파일 확장자 | 닷(.)으로 시작되는 파일 확장자 ex) .png, .jpg, .pdf, .hwp |
|
audio/* | 모든 타입의 오디오 파일이 허용됨. | |
video/* | 모든 타입의 비디오 파일이 허용됨. | |
image/* | 모든 타입의 이미지 파일이 허용됨. | |
미디어 타입 | 매개변수(parameter)를 가지지 않는 유효한 미디어 타입 |
post할때 단일파일 or 다중파일 설정
- .single(' ') 파라미터로 input file의 name속성을 지정
- .array(' ', 10) 첫번째 파라미터는 input file의 name 속성 동일, 두번째는 파일 갯수 제한 가능!
// 단일 파일 업로드
app.post('/', upload.single('file'), (req, res, next) => {
res.status(200).send({
message: "Ok",
fileInfo: req.file
})
});
// 다중 파일 업로드
app.post('/multipart', upload.array('file', 10), (req, res, next) => {
// console check
req.files.map((data) => {
console.log(data);
});
res.status(200).send({
message: "Ok",
fileInfo: req.files
})
});
이러면 설정한 storage - destination 경로를 지정한 곳에 파일이 저장된다.
disk말고 램에 저장하는 법은 간단. 근데 잘 안씀
//램에 저장하는법
// var storage = multer.memoryStorage();
// var upload = multer({ storage : storage });
'Node.js' 카테고리의 다른 글
node.js - 환경변수 관리(.env) (0) | 2023.03.21 |
---|---|
node.js - mypage 기능 (0) | 2023.03.20 |
node.js - session 방식으로 로그인 구현하기 (1) | 2023.03.20 |
node.js - method-override 라이브러리 PUT 구현 (0) | 2023.03.20 |
node.js - detail 상세페이지(params.id) (0) | 2023.03.20 |
Comments