[WEB] 웹 페이지에서 사진 업로드하기
설정
사진 업로드와 관련된 Node.js의 미들웨어인 multer
를 사용해주기 위해서 기본 설정이 필요하다.
- cmd창에서 원하는 폴더 디렉토리로 이동한다. 그리고 아래와 같이 입력한다.
- npm init -y
- npm install express
- npm install multer
public
폴더 생성 -> 여기에 index.html 을 통해서 사진 업로드에 대한 html 생성 후 다음과 같은 코드를 작성합니다.
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 | <!--public/index.html--> <!DOCTYPE html> <head> <title>Profile form</title> </head> <body> <form method="POST" action="/profile-upload-single" enctype="multipart/form-data"> <div> <label>Upload profile picture</label> <input type="file" name="profile-file" required/> </div> <div> <input type="submit" value="Upload" /> </div> </form> <hr> <form method="POST" action="/profile-upload-multiple" enctype="multipart/form-data"> <div> <label>Upload multiple profile picture</label> <input type="file" name="profile-files" required multiple /> </div> <div> <input type="submit" value="Upload" /> </div> </form> </body> </html> | cs |
- 루트 프로젝트 디렉토리에 index.js 를 생성한 후 다음과 같은 코드를 작성합니다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | //index.js var express = require('express') var multer = require('multer') var port = 3000; var app = express() var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads') }, filename: function (req, file, cb) { cb(null, file.originalname) } }) var upload = multer({ storage: storage }) /* app.use('/a',express.static('/b')); Above line would serve all files/folders inside of the 'b' directory And make them accessible through http://localhost:3000/a. */ app.use(express.static(__dirname + '/public')); app.use('/uploads', express.static('uploads')); app.post('/profile-upload-single', upload.single('profile-file'), function (req, res, next) { // req.file is the `profile-file` file // req.body will hold the text fields, if there were any console.log(JSON.stringify(req.file)) var response = '<a href="/">Home</a><br>' response += "Files uploaded successfully.<br>" response += `<img src="${req.file.path}" /><br>` return res.send(response) }) app.post('/profile-upload-multiple', upload.array('profile-files', 12), function (req, res, next) { // req.files is array of `profile-files` files // req.body will contain the text fields, if there were any var response = '<a href="/">Home</a><br>' response += "Files uploaded successfully.<br>" for(var i=0;i<req.files.length;i++){ response += `<img src="${req.files[i].path}" /><br>` } return res.send(response) }) app.listen(port,() => console.log(`Server running on port ${port}!`)) | cs |
관련 자료는 https://ichi.pro/ko/node-jseseo-multerleul-sayonghayeo-imijileul-eoblodeuhaneun-bangbeob-eun-mueos-ibnikka-267932940174935
에서 가져왔다. 근데 이거는 번역본인것 같았고, 영어로 된 것도 본 것 같기도,,,
uploads
폴더를 루트 프로젝트 디렉토리에 생성해 주면 성공 -> 근데 분명 코드를 보면uploads
폴더가 없으면 생성해서 업로드 해준다고 하는 것 같은데 이거는 실행이 안됨.
사진 업로드에 대해서 더 알아보아야 할 점
- 반드시
public
폴더 내에서 해야되는가? - 이것을 어떻게 원하고자 하는대로 꾸며서 적용시킬 수 있을까?
- 자세한 코드는 좀더 분석해봐야 될 것 같다.
- 사진 이외의 영상 업로드 방법, 폴더 추가 방법 등을 더 공부해보자
댓글남기기