흰 스타렉스에서 내가 내리지

multer 미들웨어 본문

Node.js

multer 미들웨어

주씨. 2022. 5. 19. 16:45
728x90
import express from "express";
import multer from "multer";
import path from "path";

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

const __dirname = path.resolve();
const upload = multer({
  storage: multer.diskStorage({
    destination(req, file, done) {
      done(null, "uploads/");
    },
    filename(req, file, done) {
      const ext = path.extname(file.originalname);
      done(null, path.basename(file.originalname, ext) + Date.now() + ext);
    },
  }),
  limits: { fileSize: 5 * 1024 * 1024 }, // 5MB
});

app.get("/upload", (req, res, next) => {
  res.sendFile(path.join(__dirname, "multipart.html"));
});
app.post("/upload", upload.single("image"), (req, res) => {
  console.log(req.file, req.body);
  res.send("ok");
});

app.listen(8080);

file 객체에는 업로드한 파일에 대한 정보가 있다. 

req나 file에 대한 데이터를 가공해서 done()으로 넘긴다. 

 

upload.single("image") : single은 파일 하나만 업로드할 때 사용. 인수로는 input태그의 name이나 폼 데이터의 키와 일치하게 넣는다.

upload.array('images') : input 태그에 multiple을 사용하여 한번에 여러개의 파일을 업로드할 수 있게 하였을 경우 사용한다. 업로드한 파일들은 req.files에 들어있다. 

upload.fields([{name : 'image1'}, {name : 'image2'}]) : input태그가 여러개이고, 그에 따른 name이 다 다를 경우 사용. 

업로드한 파일들은 req.files.image1, req.files.image2에 들어있다.