복붙노트

[NODEJS] Express를 사용 NodeJS 서버에서 파일을 다운로드

NODEJS

Express를 사용 NodeJS 서버에서 파일을 다운로드

해결법


  1. 1.Express는 인생을 더 쉽게 만드는 이것에 대한 도우미가 있습니다.

    Express는 인생을 더 쉽게 만드는 이것에 대한 도우미가 있습니다.

    app.get('/download', function(req, res){
      const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
      res.download(file); // Set disposition and send it.
    });
    

    다른 HTTP 헤더를 사용하여 더 많은 정보를 줄 필요가 있으므로 지금까지 브라우저에 관한 한, 파일의 이름은 바로 '다운로드'입니다.

    res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
    

    또한 이와 같은 마임 타입을 보낼 수 있습니다 :

    res.setHeader('Content-type', 'video/quicktime');
    

    좀 더 깊이있는 무언가를 원하는 경우에, 여기에 나중에 이동합니다.

    var path = require('path');
    var mime = require('mime');
    var fs = require('fs');
    
    app.get('/download', function(req, res){
    
      var file = __dirname + '/upload-folder/dramaticpenguin.MOV';
    
      var filename = path.basename(file);
      var mimetype = mime.lookup(file);
    
      res.setHeader('Content-disposition', 'attachment; filename=' + filename);
      res.setHeader('Content-type', mimetype);
    
      var filestream = fs.createReadStream(file);
      filestream.pipe(res);
    });
    

    당신은 당신이 원하는대로에 헤더 값을 설정할 수 있습니다. 파일의 마임 타입이 무엇인지 확인하기 위해 노드 마임, -이 경우, 나는 마임 타입 라이브러리를 사용하고 있습니다.

    여기에서 주목해야 할 또 다른 중요한 것은 내가 readStream를 사용하도록 코드를 변경 한 것입니다. 이 이름에 '동기화'어떤 방법을 사용하는 것은 노드가 비동기 될 운명 때문에 눈살을 찌푸리게 때문에 일을 할 수있는 더 나은 방법입니다.


  2. 2.그것은 "첨부 파일"로 경로에서 파일을 전송합니다. 예를 들어 :

    그것은 "첨부 파일"로 경로에서 파일을 전송합니다. 예를 들어 :

    var express = require('express');
    var router = express.Router();
    
    // ...
    
    router.get('/:id/download', function (req, res, next) {
        var filePath = "/my/file/path/..."; // Or format the path using the `id` rest param
        var fileName = "report.pdf"; // The default name the browser will use
    
        res.download(filePath, fileName);    
    });
    

  3. 3.등 당신의 설정에 익스프레스의 정적 기능을 사용하여 PDF 파일, 워드 문서, 같은 정적 파일의 경우 :

    등 당신의 설정에 익스프레스의 정적 기능을 사용하여 PDF 파일, 워드 문서, 같은 정적 파일의 경우 :

    // Express config
    var app = express().configure(function () {
        this.use('/public', express.static('public')); // <-- This right here
    });
    

    그리고 단지 예를 들어, 그 '공공'폴더 안에 모든 파일을 넣어 :

    /public/docs/my_word_doc.docx
    

    그리고 정기적으로 이전 링크는 사용자가 다운로드 할 수 있습니다 :

    <a href="public/docs/my_word_doc.docx">My Word Doc</a>
    

  4. 4.4.x를 고속으로 응답을 첨부 () 방법이있다 :

    4.x를 고속으로 응답을 첨부 () 방법이있다 :

    res.attachment();
    // Content-Disposition: attachment
    
    res.attachment('path/to/logo.png');
    // Content-Disposition: attachment; filename="logo.png"
    // Content-Type: image/png
    

  5. 5.여기에 내가 그것을 할 방법은 다음과 같습니다

    여기에 내가 그것을 할 방법은 다음과 같습니다

    암호:

    let fs = require('fs');
    let path = require('path');
    
    let myController = (req, res) => {
      let filename = 'myFile.ext';
      let absPath = path.join(__dirname, '/my_files/', filename);
      let relPath = path.join('./my_files', filename); // path relative to server root
    
      fs.writeFile(relPath, 'File content', (err) => {
        if (err) {
          console.log(err);
        }
        res.download(absPath, (err) => {
          if (err) {
            console.log(err);
          }
          fs.unlink(relPath, (err) => {
            if (err) {
              console.log(err);
            }
            console.log('FILE [' + filename + '] REMOVED!');
          });
        });
      });
    };
    

  6. 6.

    'use strict';
    
    var express = require('express');
    var fs = require('fs');
    var compress = require('compression');
    var bodyParser = require('body-parser');
    
    var app = express();
    app.set('port', 9999);
    app.use(bodyParser.json({ limit: '1mb' }));
    app.use(compress());
    
    app.use(function (req, res, next) {
        req.setTimeout(3600000)
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept,' + Object.keys(req.headers).join());
    
        if (req.method === 'OPTIONS') {
            res.write(':)');
            res.end();
        } else next();
    });
    
    function readApp(req,res) {
      var file = req.originalUrl == "/read-android" ? "Android.apk" : "Ios.ipa",
          filePath = "/home/sony/Documents/docs/";
      fs.exists(filePath, function(exists){
          if (exists) {     
            res.writeHead(200, {
              "Content-Type": "application/octet-stream",
              "Content-Disposition" : "attachment; filename=" + file});
            fs.createReadStream(filePath + file).pipe(res);
          } else {
            res.writeHead(400, {"Content-Type": "text/plain"});
            res.end("ERROR File does NOT Exists.ipa");
          }
        });  
    }
    
    app.get('/read-android', function(req, res) {
        var u = {"originalUrl":req.originalUrl};
        readApp(u,res) 
    });
    
    app.get('/read-ios', function(req, res) {
        var u = {"originalUrl":req.originalUrl};
        readApp(u,res) 
    });
    
    var server = app.listen(app.get('port'), function() {
        console.log('Express server listening on port ' + server.address().port);
    });
    
  7. from https://stackoverflow.com/questions/7288814/download-a-file-from-nodejs-server-using-express by cc-by-sa and MIT license