node.js 는 express-fileupload 미들웨어 를 사용 하여 파일 업 로드 를 실현 합 니 다.

본 고 는 express 를 서버 로 사용 하고 express-fileupload 라 이브 러 리 에서 제공 하 는 미들웨어 함 수 를 사용 하여 클 라 이언 트 에서 보 내 온 그림 을 받 아들 이 고 그림 을 파일 로 서버 에 저장 합 니 다.클 라 이언 트 는 create-react-app 프레임 워 크,boottstrap UI,axios 를 사용 하여 http 요청 과 현재 진도 항목 의 값 을 보 냅 니 다.업로드 에 성공 하면 그림 이 서버 에 있 는 위치 에 따라 그림 을 표시 합 니 다.
항목 초기 화

mkdir react-file-upload    //        
cd react-file-upload
npm init -y                //     npm    package.json
필요 한 의존 도 설치(dependencies)

npm i express express-fileupload
npm i -D nodemon concurrently    //                (       )
react-file-uproad/package.json 의 scripts 스 크 립 트 변경

{
  "main": "server.js",
  "script" : {
    "start": "node server.js", 
    "server": "nodemon server.js",
    "client": "npm start --prefix client",  
    "dev": " concurrently \"npm run server\" \"npm run client\" "
  }
}
  • main 에서 server.js
  • 로 변경
  • start node 로 express 시작
  • server 는 nodemon 을 사용 하여 express 를 시작 합 니 다.nodemon 은 server.js 파일 에 변동 이 있 는 지 감시 합 니 다(ctrl+S)서버 를 다시 시작 하고 node 가 시작 하면 서 서 서 비 스 를 수 동 으로 다시 시작 하지 않 습 니 다(ctrl+C 및 파일 을 변경 한 후 node server.js)
  • client 가 클 라 이언 트 를 시작 하면 client 폴 더 를 만들어 react 구성 요 소 를 작성 합 니 다
  • dev 는 concurrently 를 사용 하여 서버 와 클 라 이언 트 를 동시에 시작 합 니 다
  • 컴 파일 서버
    server.js 파일 을 작성 하 겠 습 니 다.
    
    const express = require('express');
    const fileUpload = require('express-fileupload');
    
    const app = express();
    //    express-fileupload    
    app.use( fileUpload() );
    
    //     /upload        post  
    app.post('/upload', (req, res) => {
      // req    files     express-fileupload      !? (    )
      //    files                      400
      if(req.files === null){
        return res.status(400).json({msg:'no file uploaded'});
      }
      //        
      // file      formData.append('file', file)                   
      const file = req.files.file;
      //                      500
      file.mv(`${__dirname}/client/public/uploads/${file.name}`, err => {
        if(err){
          console.error(err);
          return res.status(500).send(err);
        }
        //           json 
        //                                
        //        react      
        //        public        uploads              
        res.json({fileName: file.name, filePath: `uploads/${file.name}`});
      });
    });
    
    app.listen(5000,() => {console.log('Server started...')});
    
    
    server.js 를 실행 하면 콘 솔 에서 Server started 를 볼 수 있 습 니 다.
    
    npm run server

    클 라 이언 트 초기 화
    그리고 클 라 이언 트 를 만 듭 니 다.create-react-app 비계 로 프로젝트 를 초기 화 합 니 다.
    
    npx create-react-app client
    
    초기 화 완료 후 불필요 한 파일 을 선택 적 으로 삭제 할 수 있 습 니 다.
  • serviceWorker.js
  • logo.svg
  • index.css    // 그 후에 저 희 는 링크 태그 로 cdn 에서 boottstrap 을 도입 할 것 입 니 다
  • .
  • App.test.js  // 그냥 작은 demo
  • src/index.js 파일 에 도 입 된 index.css 를 삭제 합 니 다.Public 폴 더 에 있 는 index.html 템 플 릿 파일 에 bootstrap 의 css 와 js 를 직접 도입 합 니 다.
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" rel="external nofollow"  />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta name="theme-color" content="#000000" />
        <!--   css -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="external nofollow"  integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
        <link rel="manifest" href="%PUBLIC_URL%/manifest.json" rel="external nofollow"  />
        <title>React File Uploader</title>
      </head>
      <body>
        <noscript>You need to enable JavaScript to run this app.</noscript>
        <div id="root"></div>
        <!--   js -->
        <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
      </body>
    </html>
    
    구성 요소 작성
    각각 3 개의 구성 요 소 를 작성 해 야 합 니 다.
  • FileUpload.js:form 태그 의 onSubmit 과 axios 로 업로드 요청 보 내기
  • Message.js:정보 업로드 성공 서버 오류 나 파일 선택 이 없 음
  • Progress.js:axios 의 onUpload Progress 와 boottstrap 으로 업로드 진행 바 를 표시 합 니 다
  • FileUpload
    
    import React, { useState } from 'react'
    import axios from 'axios'
    import Message from './Message'
    import Progress from './Progress'
    
    const FileUpload = () => {
    
      return (
        <div>
          {message ? <Message msg={message} /> : null}
          <form onSubmit={onSubmit}>
            <div className="custom-file mb-4">
              <input type="file" className="custom-file-input" id="customFile" onChange={onChange}></input>
              <label className="custom-file-label" htmlFor="customFile">{filename}</label>
            </div>
            <Progress percentage={uploadedPercentage}></Progress>
            <input className="btn btn-primary btn-block mt-4" type="submit" value="Upload"></input>
          </form>
          {
            uploadedFile ? 
              <div className="row mt-5">
                <div className="col-md-6 m-auto">
                  <h3 className="text-center">{uploadedFile.name}</h3>
                  <img style={{width:'100%'}} src={uploadedFile.filePath} alt=""></img>
                </div>
              </div> :
              <p>nothing uploaded yet...</p>
          }
        </div>
      )
    }
    export default FileUpload
    
    
    Message.js
    
    import React from 'react'
    import PropTypes from 'prop-types'
    
    const Message = ({msg}) => {
      console.log('her')
      return (
        <div className="alert alert-info alert-dismissible fade show" role="alert">
          {msg}
          <button type="button" className="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
      )
    }
    Message.propTypes = {
      msg: PropTypes.string.isRequired,
    }
    export default Message
    
    
    Progress.js
    
    import React from 'react'
    import PropTypes from 'prop-types'
    
    const Progress = ({percentage}) => {
      return (
        <div className="progress">
          <div className="progress-bar" role="progressbar" 
            style={{ width: `${percentage}%` }} 
            aria-valuenow={percentage} aria-valuemin="0" aria-valuemax="100">{percentage}%</div>
        </div>
      )
    }
    Progress.propTypes = {
      percentage: PropTypes.number.isRequired,
    }
    export default Progress
    
    
    테스트
    지금까지 모든 기능 구성 요소 가 완료 되 었 습 니 다.
    
    npm run dev
    

    마지막 으로 git 주소 첨부Git
    node.js 가 express-fileupload 미들웨어 를 사용 하여 파일 업 로드 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 node.js 파일 업로드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기