• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

multer시 file.path 관련

22.03.02 14:39 작성 조회수 574

1

multer를 이용한 uploads 폴더에 이미지 업로드시 

file 로그를 찍어보면 아래와 같이 path에서 \\ 두번 찍힙니다

postman으로 확인해도 마찬가지고요

filename과 destination은 정상인데 어디서 두번 찍히게 되는지 모르겠네요.

아래는 로그로 찍어본 file과 server.js 전체 코드입니다

근데 또 file.path로 찍어보면 uploads\join.jpg 로 찍혀서 해당 폴더에 이미지는 올라가고 있어요

{

  fieldname: 'image',

  originalname: 'join.jpg',

  encoding: '7bit',

  mimetype: 'image/jpeg',

  destination: 'uploads/',

  filename: 'join.jpg',

  path: 'uploads\\join.jpg',

  size: 88818

}

 

const express = require("express");
const cors = require("cors");
const app = express();
const port = 8080;
const models = require("./models");
const multer = require("multer");
const upload = multer({
  storage: multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, "uploads/");
    },
    filename: function (req, file, cb) {
      cb(null, file.originalname);
    },
  }),
});
app.use(express.json());
app.use(cors());
app.use("/uploads", express.static("uploads"));

app.get("/products", (req, res) => {
  models.Product.findAll({
    //limit : 1,
    order: [["createdAt", "DESC"]],
    attributes: ["id", "name", "price", "createdAt", "seller", "imageUrl"],
  })
    .then((result) => {
      console.log("products : ", result);
      res.send({
        products: result,
      });
    })
    .catch((error) => {
      console.log("error : ", error);
      res.send("에러발생");
    });
});

app.post("/image", upload.single("image"), (req, res) => {
  const file = req.file; //저장된 이미지 정보 get
  console.log("file : ", file);
  console.log("file path====", file.path);
  res.send({
    imageUrl: file.path,
  });
});

app.post("/products", (req, res) => {
  const body = req.body;
  const { name, description, price, seller } = body;
  if (!name || !description || !price || !seller) {
    res.send("모든 필드를 입력해주세요.");
  }
  models.Product.create({
    name,
    description,
    price,
    seller,
  })
    .then((result) => {
      console.log("상품 생성 결과 : ", result);
      res.send({
        result,
      });
    })
    .catch((error) => {
      console.error(error);
      res.send("상품 업로드에 문제가 발생");
    });
  res.send({
    body,
  });
});

app.get("/products/:id", (req, res) => {
  const params = req.params;
  const { id } = params;
  models.Product.findOne({
    where: {
      id: id,
    },
  })
    .then((result) => {
      console.log("product : ", result);
      res.send({
        product: result,
      });
    })
    .catch((error) => {
      console.log(error);
      res.send("상품 조회에 에러가 발생했습니다.");
    });
});

app.listen(port, () => {
  console.log("그랩에 쇼핑몰 서버가 돌아가고 있습니다.");
  models.sequelize
    .sync()
    .then(() => {
      console.log("db 연결 성공");
    })
    .catch((err) => {
      console.log(err);
      console.log("db 연결 에러");
      process.exit();
    });
});

답변 1

답변을 작성해보세요.

1

multer 상에서 결과를 표현할 때 저렇게 보여주는 것 같습니다!

실제로 윈도우에서는 경로를 표현할 때 backslash(\) 나 double backslash(\\) 모두 동일한 결과를 내므로 걱정할 필요는 없을 것 같습니다 :)

https://stackoverflow.com/questions/15969608/what-is-the-difference-between-and-in-file-path

이유진님의 프로필

이유진

질문자

2022.03.06

감사합니다^^!