ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [multer lib] - 서버에 비디오 저장하기
    React/프로젝트 2022. 2. 10. 22:48

    이전에 Dropzone lib 설정한 부분에 onDrop func 이어서 구현하기

    // VideoUploadPage.js
    
    <Dropzone onDrop={onDrop} multiple={false} maxSize={1000000000}>
        {({ getRootProps, getINputProps }) => (
            <div {...getRootProps()}>
                <input {...getInputProps()} />
            </div>
        )}
    </Dropzone>
    
    
    
    // onDrop func
    // axios로 서버로 전송
    const onDrop = (files) => {
        let formData = new FormData();
        
        const config = {
            header: { "content-type": "multipart/form-data" },
        };
        formData.append("files", files);
        console.log("files", files);
        
        Axios.post("/api/video/uploadfiles", formData, config).then((response) => {
            if(response.data.success) {
                console.log("uploadfiles success", response.data);
            } else {
                alert("비디오 업로드 실패");
            }
        });
    };

     

    • 노드 서버에 파일 저장
      • npm install multer --save   (in server directory)
      • server route에서 옵션 설정
    multer?
    파일 업로드를 위해 사용되는 multipart/form-data를 다루기 위한 node.js의 미들웨어
    // video.js (server > routes > video.js)
    
    
    const express = require("express");
    const router = express.Router();
    const multer = require("multer");
    
    // Storage multer config
    const storage = multer.diskStorage({
        destination: (req, file, cb) => {    // 파일 저장소 => upload
            cb(null, "uploads/");
        },
        filename: (req, file, cb) => {     // 파일 이름 지정
            cb(null, `${Date.now()}_${file.originalname}`);
        },
        fileFilter: (req, file, cb) => {
            const ext = path.extname(file.originalname);
            if(ext !== ".mp4") {          // 파일 유형(.mp4만), ex) if(ext !== ".mp4" || ext !== ".png") => mp4 또는 png파일만
                return cb(res.status(400).end("only mp4 is allowed"), false);
            }
            cb(null, ture);
        },
    });
    
    
    const upload = multer({ storage: storage }).single("file");
    
    router.post("/uploadfiles", (req, res) => {
        upload(req, res, (err) => {
            if(err) {
                return res.json({ success: false, err });
            }
            return res.json({
                success: true,
                url: res.req.file.path,
                fileName: res.req.file.filename
            });
        });
    });

     

    [결과]

    'React > 프로젝트' 카테고리의 다른 글

    event.target vs event.currentTarget 차이  (0) 2022.02.10
    [react-dropzone] - 비디오 업로드  (0) 2022.02.04
    [HOC] - 인증체크  (0) 2022.01.26
    [redux 활용] - LOGIN  (0) 2022.01.26
    [redux] - store 생성  (0) 2022.01.26
Designed by Tistory.