반응형
1. 개요
- 이미지는 mongoDB같은데에 저장하진 않고
- 그냥 서버에 저장 함
- public 폴더에 image 폴더 만들어서 거기에 이미지 저장합시다
2. multer 라이브러리 설치
- 파일전송을 도와주는 라이브러리임
npm install multer
- 위 명령어 입력해서 설치
3. 코드
(1) upload.ejs
- upload.ejs파일 만들거임
<div class="container mt-4">
<h4 class="text-center mb-3">업로드페이지</h4>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="uploadImg" />
<button type="submit">전송</button>
</form>
</div>
- form태그 만들고 /upload라는 URL로 POST요청 할 수 있도록 속성 줍시다
- 그리고 name값이 uploadImg인 input태그 만들어주세요
(2) server.js
// multer 사용 설정
let multer = require("multer");
var storage = multer.diskStorage({
// 저장 경로 설정하기
destination: function (req, file, cb) {
cb(null, "./public/image");
},
// 업로드된 파일명으로 저장하기
filename: function (req, file, cb) {
cb(null, file.originalname + "날짜" + new Date());
},
// 확장자 필터링
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,
},
});
// upload 미들웨어 설정
var upload = multer({ storage: storage });
- 우선 아까 다운받은 multer 라이브러리 설정을 해야 함
- 저장 경로랑 파일명 셋팅 같은거 다 해주고
- 특정 확장자의 파일만 업로드 할거면 그것도 셋팅해주면 됨
// 이미지 업로드 페이지 렌더링 코드
app.get("/upload", function (req, res) {
res.render("upload.ejs");
});
// 이미지 업로드 코드
// upload.single("input 태그의 name 속성값")
app.post("/upload", upload.single("uploadImg"), function (req, res) {
res.send("완료");
});
// 이미지 이름으로 URL 요청오면 해당 이미지 보여줌
app.get("/image/:imgName", function (req, res) {
res.sendFile(__dirname + "/public/image/" + req.params.imgName);
});
- 특정 URL로 요청오면 처리하는 코드도 만들어줍시다
반응형
'코딩 > NodeJS' 카테고리의 다른 글
nodejs로 채팅방 기능 만들기 (0) | 2023.02.07 |
---|---|
구글 클라우드로 nodejs 프로젝트 배포하기 (0) | 2023.02.06 |
nodejs에서 routes폴더 이용해서 라우터 관리하기 (0) | 2023.02.04 |
nodejs에서 회원 게시판 기능 만들기 (0) | 2023.02.03 |
nodejs랑 mongodb에서 검색 기능 최적화하기(2) (0) | 2023.02.02 |