• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

node js를 이용하고 mysql에 이미지 경로 저장

23.07.13 14:26 작성 조회수 747

2

 

nodejs, multer를 통해서 이미지를 업로드했습니다

db에 해당 파일명uuid()를 통해서 저장을 했는데

이미지 주소복사 해서 검색해서 들어가면 이미지가 나오는데

검색해도 못들어가게 하려면 어떻게해야하나요? 또는 관리자만 들어갈수있게하려는데 방법이 있을까요

답변 1

답변을 작성해보세요.

1

multer로 사용해서 서버에 이미지를 저장하는 경우에는 이런 방식으로 하면 되요:

const express = require('express');
const fs = require('fs');
const app = express();
const path = require('path');

// 관리자 확인 미들웨어
function isAdmin(req, res, next) {
    // 이 함수는 예시로, 실제로는 사용자가 관리자인지 확인하는 로직이 들어가야 합니다.
    const user = getUserFromRequest(req); // 구현 필요

    if (user.isAdmin) {
        next();
    } else {
        res.status(403).send('Forbidden');
    }
}

app.get('/images/:uuid', isAdmin, (req, res) => {
    const uuid = req.params.uuid;
    const imagePath = path.join(__dirname, 'uploads', uuid);

    // 파일이 존재하는지 확인
    if (fs.existsSync(imagePath)) {
        res.sendFile(imagePath);
    } else {
        res.status(404).send('File not found');
    }
});

 

만약 강의 차후에 나오는 S3 같은 외부 저장소에 이미지를 저장할 경우에는 방법이 좀 다릅니다. AWS signedUrl 생성으로 클라이언트가 서버를 거치지 않고 S3에 바로 이미지 업로드 하는 방법을 배우게 되는데요. 비슷한 방식으로 GET (읽기) 전용 signedUrl을 생성받을 수 있습니다. 이렇게 하면 권한이 부여된 유저만 이미지를 확인할 수 있게 되요