node.js 파일 업로드 및 다운로드 실현

수요


최근 프로젝트에서 파일 업로드와 다운로드라는 요구가 생겼다.구체적인 상황은 다음과 같다.
A가 작업 파일(파일 형식에 제한이 없음)을 사이트에 업로드하고 B가 본 후에 파일을 다운로드하여 파일의 요구에 따라 작업을 완성한 후에 B는 작업 완성 상황을 하나의 Excel 문서에 모아 사이트에 업로드한다. (이때 xls 형식의 excel 문서만 업로드할 수 있음) 그리고 사이트는 백그라운드에서 이 Excel 문서의 데이터를 처리하여 새로운 Excel 문서를 생성한다.
이 항목은 Node 기반이기 때문입니다.js 개발, 그래서 어떻게 파일의 업로드 다운로드 기능을 실현합니까?

실현


생각

  • form 폼 페이지 작성
  • formidable 도입, 폼 데이터 분석
  • 업무 논리 함수 작성
  • form 양식 페이지 작성

    
    
    
        node.js 
    
    
      
    파일 다운로드

    enctype="multipart/form-data" 의 역할은 양식의 MIME 인코딩을 설정하는 것입니다.기본적으로 이 인코딩 형식은 응용 프로그램/x-www-form-urlencoded로 파일 업로드에 사용할 수 없습니다.multipart/form-data를 사용해야만 파일 데이터를 완전하게 전달할 수 있습니다. enctype="multipart/form-data" 는 2진 데이터를 업로드하는 것으로form에 있는 input의 값이 2진법으로 전달되기 때문에request는 값을 얻지 못합니다.
    따라서 우리는 node를 도입해야 한다.js의 외부 모듈:formidable, 폼 데이터를 분석합니다.

    formidable 도입, 폼 데이터 분석


    npm을 통해 formidable를 도입하면 npm에서 formidable에 대한 설명은 다음과 같습니다.
    A node.js module for parsing form data, especially file uploads.
  • 방식1: node 명령을 통해 도입:
  • npm install formidable
  • 방식2: 프로젝트 프로젝트의 패키지를 편집합니다.json 파일:
  • {
      "name": "appname",
      "virsion": "0.0.1",
      "dependencies": {
        "express": "~4.8.8",
        "formidable": "1.0.14"
      }
    }

    node 명령을 실행하여 모듈 설치
    npm install

    업무 논리 함수 작성


    1.upload 함수
    새 파일:file.js
    var formidable = require('formidable');
    var fs = require('fs');  //node.js 
    
    exports.upload = function(req, res, next){
      var message = '';
      var form = new formidable.IncomingForm();   // 
        form.encoding = 'utf-8';        // 
        form.uploadDir = 'public/upload/';     // 
        form.keepExtensions = true;     // 
        form.maxFieldsSize = 2 * 1024 * 1024;   // 
      
      form.parse(req, function(err, fields, files) {
        if (err) {
          console.log(err);
        }  
    
        var filename = files.resource.name;
    
        //  , 
          var nameArray = filename.split('.');
          var type = nameArray[nameArray.length-1];
          var name = '';
          for(var i=0; i

    의외의 일이 없으면 파일이 성공적으로 업로드됩니다.
    2.download 함수
    파일에 있습니다.js 파일 코드 끝 추가:
    exports.download = function(req, res){
      var path = 'public/upload/file.txt';  //  
    
      // filename: , , 
      res.download(filepath, filename); 
    };

    이 프로젝트는 Express(node.js 기반의 웹 개발 프레임워크)를 응용하여 리퀘스트,response 대상을 봉인했기 때문에 봉인된res 대상의 다운로드 방법을 직접 호출하여 파일을 다운로드할 수 있습니다.
    다음은 루트 제어 파일 루트입니다.js에 코드 추가:
    var file = require("file.js");  // ,route.js file.js 
    
    app.post('/fileupload', file.upload);
    app.get('/download/:id', file.download);  // 탭, 안의 kkk는 이 파일의 id를 가리킨다

    express가 루트 제어를 진행했기 때문에 php, asp 원생처럼 요청 경로가 파일 경로에 대응하는 것이 아닙니다.static 자원을 제외하고 다른 요청 경로를 설정해야 합니다.따라서 위에서 업로드와 다운로드에 대응하는 루트 규칙을 설정했다.
    이렇게 하면 파일의 업로드와 다운로드 기능이 기본적으로 실현되고 구체적인 확장과 수정은 프로젝트의 구체적인 수요에 따라 조정된다.

    좋은 웹페이지 즐겨찾기