express에서 upload받은 파일 다른 api endpoint에 upload하기

최대 1 분 소요

문제

express에서 업로드 받은 파일을 request body가 파싱을 하지 못하고, 파싱 후에는 폼 데이터로 전송이 안됨.

해결하기 전에 알아야할 것들

기본적으로 클라이언트(웹)에서도 파일 핸들링을 위해 FormData를 쓰는것처럼 express에서도 FormData의 이용이 가능하다.

npm i -S form-data

또한 파일 업로드를 제어하기 위해 multer를 이용한다.

npm i -S multer

해결

router.js

import express from 'express'
import axios from 'axios'
const router = express.Router()

const upload = multer({ dest: 'tmps/' })  // dest경로로 업로드 됨
const FormData = require('form-data')
const fs = require('fs')

router.post('/upload', upload.single('file'), async (req, res, next) => {
  try {
    let form = new FormData()

    form.append('file', fs.createReadStream(req.file.path)) // dest로 지정된 위치에서 기본 지정 파일명으로 path에 저장됨

    const { data } = await axios.post('{api server}/upload', form, {
      headers: form.getHeaders()
    })

    res.json(data)
  } catch (err) {
    next(err)
  }
})

댓글남기기