방명록
- [개발자의품격][부트캠프][1기][31차시] Node.js #6 | static(서버 자원 오픈) | multer(업로드한 파일을 쉽게 관리) | xlsx(엑셀 파일 처리)2022년 04월 11일 17시 26분 50초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
| static
static으로 서버에 있는 자원을 열어 줄 수 있다. 예를 들어 제품 사진을 판매자가 업로드를 했다면 서버의 특정 폴더에 해당 사진을 저장한다. 이때 static으로 열어두면 클라이언트에서 업로드한 이미지를 볼 수 있게 된다.
node 폴더에 public 폴더를 만든 후 public 폴더 아래에 images 폴더를 만든다. images 폴더 내에 nodemon.png 파일을 넣는다. 브라우저에서 "http://localhost:3000/images/nodemon.png"로 접근이 가능해진다.
// 15_static.js const express = require("express"); const app = express(); // http://localhost:3000/images/nodemon.png app.use(express.static("public")); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); });
특정 alias를 줄 수도 있다. 아래 코드에는 "/static"을 넣어 주었다.
// 15_static.js const express = require("express"); const app = express(); // http://localhost:3000/static/images/nodemon.png app.use("/static", express.static("public")); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); });
| multer
클라이언트에서 업로드한 파일들을 쉽게 관리할 수 있게 해 주는 모듈이다. 다음과 같이 모듈을 설치한다.
npm install multer
node에 업로드 파일이 저장될 "uploads" 폴더를 생성한다.
// 16_multer.js const express = require("express"); const app = express(); const multer = require("multer"); // multer const path = require("path"); // multer require("dotenv").config({ path: `mysql/.env.test` }); const mysql = require("./mysql"); app.use( express.json({ limit: "50mb", // 최대 50메가 }) ); // 클라이언트 요청 body를 json으로 파싱 처리 const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, "uploads"); // 전송된 파일이 저장되는 디렉토리 }, filename: function (req, file, cb) { // 현재 파일 업로드되는 년월일시분초밀리세컨드+업로드 파일의 확장자 cb(null, new Date().valueOf() + path.extname(file.originalname)); // 시스템 시간으로 파일이름을 변경해서 저장(동일한 파일명이 덮어 쓰는 현상을 예방하기 위함) }, }); const upload = multer({ storage: storage }); // 위에서 정의한 storage를 사용 app.post("/api/attachment", upload.single("attachment"), async (req, res) => { console.log(req.file); res.send(req.file); }); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); });
업로드 파일의 정보를 DB에 업로드하는 코드를 추가하였다.
// 16_multer.js const express = require("express"); const app = express(); const multer = require("multer"); const path = require("path"); require("dotenv").config({ path: `mysql/.env.test` }); // console.log(process.env); const mysql = require("./mysql"); app.use( express.json({ limit: "50mb", // 최대 50메가 }) ); // 클라이언트 요청 body를 json으로 파싱 처리 const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, "uploads"); // 전송된 파일이 저장되는 디렉토리 }, filename: function (req, file, cb) { // 현재 파일 업로드되는 년월일시분초밀리세컨드+업로드 파일의 확장자 cb(null, new Date().valueOf() + path.extname(file.originalname)); // 시스템 시간으로 파일이름을 변경해서 저장(동일한 파일명이 덮어 쓰는 현상을 예방하기 위함) }, }); const upload = multer({ storage: storage }); // 위에서 정의한 storage를 사용 app.post("/api/attachment", upload.single("attachment"), async (req, res) => { console.log(req.file); console.log(req.body); // DB에 업로드할 파일 정보 const fileInfo = { product_id: parseInt(req.body.product_id), originalname: req.file.originalname, mimetype: req.file.mimetype, filename: req.file.fieldname, path: req.file.path, }; res.send(fileInfo); // DB에 파일 정보를 저장 관리하고자 할 때 // const r = await mysql.query("imageInsert", fileInfo); // res.send(r); }); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); });
| xlsx
엑셀 파일을 JSON 파일로 변환하고자 한다. 실무에서는 굉장히 많이 사용하는 기능이다. 다음과 같이 모듈을 설치한다.
npm install xlsx
엑셀 시트를 JSON 파일로 변경한 후 업로드를 위해 위에서 살펴본 muter를 이용한다.
// 17_xlsx_upload.js const express = require("express"); const app = express(); const xlsx = require("xlsx"); // xlsx const multer = require("multer"); const path = require("path"); require("dotenv").config({ path: `mysql/.env.test` }); // console.log(process.env); const mysql = require("./mysql"); app.use( express.json({ limit: "50mb", // 최대 50메가 }) ); // 클라이언트 요청 body를 json으로 파싱 처리 const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, "uploads"); // 전송된 파일이 저장되는 디렉토리 }, filename: function (req, file, cb) { cb(null, new Date().valueOf() + path.extname(file.originalname)); // 시스템 시간으로 파일이름을 변경해서 저장 }, }); const upload = multer({ storage: storage }); // xlsx 사용 코드 app.post("/api/xlsx", upload.single("xlsx"), async (req, res) => { console.log(req.file); console.log(req.body); const workbook = xlsx.readFile(req.file.path); const firstSheetName = workbook.SheetNames[0]; // 첫 번째 시트에 데이터가 있다고 가정 const firstSheet = workbook.Sheets[firstSheetName]; const firstSheetJson = xlsx.utils.sheet_to_json(firstSheet); // sheet_to_json은 엑셀 시트를 JSON 으로 변경해 준다. res.send(firstSheetJson); }); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); });
728x90반응형'영광의 시대! > 2022 개발자의 품격 부트캠프 1기' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글