brunch

video upload & create(1)

by 이종복

이번 글에서는 video upload와 create에 대해서 다루겠습니다.


1) 우선 postUpload 컨트롤러에

console.log(file, title, description)을 추가해줍니다.

이것들을 추가해주는 이유는 실제 upload가 일어날 때,

어떤 일이 일어나는지 출력을 통해 알기 위해서입니다.

hello227.png


2-1) 하지만 File의 직접 정보는 중요하지 않습니다. 중요한 것은 File의 Location입니다.

이 Location은 어떤 서버, 예를 들면 나의 서버나 아마존의 서버에 있는 Location을 의미합니다.

hello228.png


2-2) 앞의 Video Model 만들기에서 설명했듯이,

Video Schema는 File 자체를 저장하지 않고, File의 Location을 저장합니다.

hello229.png


3) 다음은 Video가 아닌 다른 종류의 파일들(ex) image)이 업로드되는 것을 막아야 합니다.

upload.pug로 이동해서 input(type="file" ... ) 태그에 accept="video/*" 를 추가합니다.

hello230.png



4) 다음은 File을 upload하고 URL을 반환하는 middleware를 추가합니다.

이 middleware의 이름은 multar이다. npm install multar를 통해서 설치합니다.

hello231.png


5) 그리고 upload.pug의 form에 enctype= "multipart/form-data" 를 추가합니다.

enctype을 통해 전송되는 데이터 형식을 설정하며,

multipart/form-data는 파일을 서버로 전송할 경우 사용하는 방식이다.

hello232.png


6) 다음은 middlwares.js에 3줄의 코드를 추가해줍니다.

import multer from "multer" : 다운 받은 multer middlware를 import해줍니다.

const multerVideo = multer({dest: "uploads/videos/"});

: dest는 destination의 줄임말입니다.

여기서 destination은 우리가 이용할 서버에 있는 폴더의 주소를 의미합니다.


export const uploadVideo = multerVideo.single("videoFile");

: 여기서 single이란 오직 하나의 파일만 업로드할 수 있다는 것을 의미합니다.

const uploadVideo = multerVideo.single("videoFile")을 선언해주고,

uploadVideo를 export 해줍니다.

hello233.png


7) 다음은 videoRouters.js로 이동해서

import {uploadVideo} from "../middlewares" 를 추가하고

videoRouter.post(routes.upload, postUpload)의 중간에 uploadVideo를 추가합니다.

hello234.png


8) 다음과 같이 설정을 마쳤다면, 실제 file이 업로드되는 흐름은 다음과 같습니다.

8-1) 우리가 File을 Upload하면, 서버에 있는 폴더("uploads/videos/")에 업로드되고,

8-2) postUpload라는 function이 해당 FIle에 접근합니다.

이 때, 접근 방식은 file 방식이 아닌 URL 방식입니다.


나머지 내용은 2부에서 연결해서 다루겠습니다.


"다음은 노마드코더(https://academy.nomadcoders.co/)의 [초급 풀스택] 유튜브 클론 코딩 강의를 참고하였습니다."

keyword
매거진의 이전글home controller 완성하기