NODE.JS file (1)

enctype="multipart/form-data" : form태그 안에 파일을 보내는 형식 설정

* controller에서 module.exports 안에 양이 많아지는걸 대비해 ,

따로 오브젝트를 만들어서 여러 함수를 저장한 후, 

내보낼 때는 키 밸류 형식으로 내보낸다.

* 따라서, router에서 보낸때는 컨트롤러면.오브젝트명.함수명 형식으로 보낸다.

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS file (2)

npm install multer@1.4.4 --save : multer 기능 설치

req.file : 받아온 파일 전송 방법

require("multer") : 설치한 multer기능 불러오기

multer.diskStorage({

destination: (req, file, db) => { : cb : 파일이 들어왔을때 어떻게 처리할 지

cb(null, "upload_file") : 파일을 불러왔을때 어디에 저장할 지 지정

destination: (req, file, db) => { 

cb(null, file.originalname) : 넘겨올 떄 파일 이름을 원하는대로 설정(originalname : 원본 파일명)

Data.now() : 현재 시각

cb(null, true) : true면 저장

controller에게 보낼 때, upload.single("file_name") : 단일 파일 저장 목적 (괄호 안에는 ejs에서 널길 때 파일명과 동일)

const router = require("express").Router();
const multer = require("multer"); //설치한 multer기능 불러오기
//const upload = multer({ dest: "upload_file" }); // 사용자가 파일을 넘겼을 때 어디(폴더)에 만들지 지정
// dest : 목적지
const stg = multer.diskStorage({
  destination: (req, file, cb) => {
    // cb : 파일이 들어왔을때 어떻게 처리할 지
    console.log("req : ", req.body);
    console.log("file : ", file);
    console.log("cb : ", cb);
    cb(null, "upload_file");
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + "-" + file.originalname); // 넘겨올 때 파일 이름을 원하는대로 설정 (originalname = 원본 파일 명)
  }, // Date.now() : 현재 시각
});

const f_filter = (req, file, cb) => {
  console.log("f_filter file : ", file.mimetype.split("/"));
  const type = file.mimetype.split("/");
  // if (type[1] == "jpg" || type[1] == "jpeg" || type[1] == "png") {
  if (type[0] == "image") {
    cb(null, true); //true면 저장
  } else {
    req.fileValidation = "이미지만 저장하세요";
    cb(null, false);
  }
};

const upload = multer({ storage: stg, fileFilter: f_filter });
const fileCtrl = require("./../controller/file_controller");

router.get("/", fileCtrl.view.index);
router.post("/upload", upload.single("file_name"), fileCtrl.process.upload);
//단일 파일 저장 목적(괄호 안에는 ejs에서 넘길 떄 파일명과 동일하게)

module.exports = router;

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS file (3)

res.download(경로) : 경로에 있는 것을 다운로드 해주는 기능

thist = 본인 태그 자기 자신

FileReader() : 파일을 불러오는 기능

불러오 파일.onload() : 파일을 화면에 보여주는 기능

onchange="" : HTML요소에 변화가 일어났을 때

readAsDataURL() : 해당 객체를 URL표현으로 변환

<script>
  const readURL = (input) => {
    console.log(input);
    console.log(input.files[0]);
    const file = input.files[0];
    if (file != "") {
      let reader = new FileReader(); // 파일을 불러오는 기능
      reader.readAsDataURL(file);
      reader.onload = (e) => {
        // 파일을 화면에 보여주는 기능
        console.log(e.target.result);
        document.getElementById("img").src = e.target.result;
      };
    }
  };
</script>

<form action="/file/upload" method="post" enctype="multipart/form-data">
  <!-- 파일 보내는 형식 표시 -->
  <input type="text" name="title" /><br />
  <img id="img" src="" width="100" height="100" />
  <input type="file" name="file_name" onchange="readURL(this)" /><br />
  <input type="submit" value="전송" />
</form>
<hr />
<a href="/file/list">목록 확인</a>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS file (4)

fs.unlinkSync : 파일 삭제

* 기능이나 함수들은 script를 통해 받아온다

* css는 link를 통해 받아온다

app.use("/static", express.static("./public")) : public이라는 위치를 static이라는 명칭으로 사용

                                         그렇지 않으면 가져올 수 없다

const router = require("express").Router();
const multer = require("multer"); //설치한 multer기능 불러오기
//const upload = multer({ dest: "upload_file" }); // 사용자가 파일을 넘겼을 때 어디(폴더)에 만들지 지정
// dest : 목적지
const stg = multer.diskStorage({
  destination: (req, file, cb) => {
    // cb : 파일이 들어왔을때 어떻게 처리할 지
    console.log("req : ", req.body);
    console.log("file : ", file);
    console.log("cb : ", cb);
    cb(null, "upload_file");
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + "-" + file.originalname); // 넘겨올 때 파일 이름을 원하는대로 설정 (originalname = 원본 파일 명)
  }, // Date.now() : 현재 시각
});

const f_filter = (req, file, cb) => {
  console.log("f_filter file : ", file.mimetype.split("/"));
  const type = file.mimetype.split("/");
  // if (type[1] == "jpg" || type[1] == "jpeg" || type[1] == "png") {
  if (type[0] == "image") {
    cb(null, true); //true면 저장
  } else {
    req.fileValidation = "이미지만 저장하세요";
    cb(null, false);
  }
};

const upload = multer({ storage: stg, fileFilter: f_filter });
const fileCtrl = require("./../controller/file_controller");

router.get("/", fileCtrl.view.index);
router.post("/upload", upload.single("file_name"), fileCtrl.process.upload);
//단일 파일 저장 목적(괄호 안에는 ejs에서 넘길 떄 파일명과 동일하게)
router.get("/list", fileCtrl.view.list);
router.get("/download/:fileName", fileCtrl.view.download);
router.get("/deleteFile/:fileName", fileCtrl.process.deleteFile);
router.get("/modify_form/:fileName", fileCtrl.view.modifyForm);
router.post("/modify", upload.single("newFileName"), fileCtrl.process.modify)
module.exports = router;
const fs = require("fs");
const view = {
  // module.exportes안에 양이 많아지는걸 대비해 따로 오브젝트를 만들어서 여러 함수를 저장한 후,
  // 내보낼때는 키 밸류 형식으로 내보낸다.
  index: (req, res) => {
    console.log("controller index 연동");
    res.render("file_index");
  },
  list: (req, res) => {
    let fList;
    fList = fs.readdirSync("./upload_file");
    res.render("file_list", { list: fList });
  },
  download: (req, res) => {
    const path = `./upload_file/${req.params.fileName}`;
    res.download(path); //다운로드를 해주는 기능
  },
  modifyForm: (req, res) => {
    const fileName = req.params.fileName;
    res.render("modify_form", { fileName });
  },
};
const process = {
  upload: (req, res) => {
    console.log(req.file); // 파일 전송 방법
    console.log("========");
    console.log(req.body);

    console.log("validation : ", req.fileValidation);
    if (req.fileValidation) {
      return res.send(req.fileValidation);
    }
    res.send("연동");
  },
  deleteFile: (req, res) => {
    fs.unlinkSync("./upload_file/" + req.params.fileName); //파일 삭제
    res.redirect("/file/list");
  },
  modify: (req, res) => {
    console.log("req.file : ", req.file)
    if (req.file) { //파일을 변경했다면
        return res.redirect(`/file/deleteFile/${req.body.originFileName}`);
    }
    res.redirect("/file/list");
  }
};

module.exports = { view, process };

 

실행 결과

 

'node.js' 카테고리의 다른 글

NODE.JS 활용 (8)  (0) 2024.04.09
NODE.JS 활용 (7)  (0) 2024.04.08
NODE.JS 활용 (5)  (0) 2024.04.04
NODE.JS 활용 (4)  (0) 2024.04.02
NODE.JS 활용 (3)  (0) 2024.04.01

+ Recent posts