📜  如何使用 Express.js 下载文件?

📅  最后修改于: 2022-05-13 01:56:27.645000             🧑  作者: Mango

如何使用 Express.js 下载文件?

Express.js 是一个路由和中间件框架,用于处理网页的不同路由,它工作在请求和响应周期之间,并且工作在 node.js 服务器的顶部。在本文中,我们将讨论如何使用 express.js 下载文件。

下载文件使用 express.js 我们将看到两种情况:

  1. 使用res.download()函数下载单个文件,该函数接受两个参数,即文件的路径和一个在发生任何错误时处理的函数。
  2. 下载多个文件作为压缩文件夹,我们将使用“ express-zip ”npm 包,它使用 zip()函数,它将对象数组作为参数。每个对象都有两个字段路径和文件名。

我们先初始化项目,对每个场景一一讨论:

第 1 步:创建一个“ app.js ”文件并使用 npm 初始化您项目。

npm init

第 2 步:现在安装两个npm包:“ express ”和“ express-zip ”。

npm install express
npm install express-zip

第 3 步:创建一个“ index.html ”文件,然后在您的项目文件夹中创建一个名为“ Files ”的文件夹。在 files 文件夹中创建下面提到的四个文本文件:

  • single_gfg.txt
  • multiple_one_gfg.txt
  • multiple_two_gfg.txt
  • multiple_three_gfg.txt

最终的项目结构将如下所示:

项目结构

第 4 步:现在让我们编写“ index.html ”文件。在其中,我们将创建两种形式:

  • 一个 GET 路由为 - ' /single '(用于处理单个文件下载请求)。
  • 一个带有 GET 路由的 - ' / multiple e '(用于处理多文件下载请求)。

索引.html

HTML


 

    
    
    
    Download

 

    
           
             
      

           
             
 


Javascript
// Requiring express package for routing
const express = require('express')
 
// Creating app
const app = express();
 
// Requiring express-zip for downloading a zip file
const zip = require('express-zip');
 
// The folder path for the files
const folderPath = __dirname+'/Files';
 
// GET request for single file
app.get('/single',function(req,res) {
    console.log('single file');
     
    // Download function provided by express
    res.download(folderPath+'/single_gfg.txt', function(err) {
        if(err) {
            console.log(err);
        }
    })
})
 
// GET request for multiple file download as zip
app.get('/multiple', function(req, res) {
    console.log('Multiple file download')
 
    // zip method which take file path
    // and name as objects
    res.zip([
           { path: folderPath+'/multiple_one_gfg.txt',
               name: 'one_gfg.txt'},
           { path: folderPath+'/multiple_two_gfg.txt',
               name: 'two_gfg.txt'},
           { path: folderPath+'/multiple_three_gfg.txt',
            name: 'three_gfg.txt'}
    ])
})
 
// GET request to the root of the app
app.get('/', function(req, res){
    res.sendFile(__dirname+'/index.html');
})
 
// Creating server at port 3000
app.listen(3000,function(req,res){
    console.log('Server started to listen at 3000');
})


第 5 步:现在对“ app.js ”文件进行编码。在其中,我们创建了GET请求函数来使用 express 处理下载请求。我们使用开头提到的“ express-zip ”和res.download()

app.js 文件

Javascript

// Requiring express package for routing
const express = require('express')
 
// Creating app
const app = express();
 
// Requiring express-zip for downloading a zip file
const zip = require('express-zip');
 
// The folder path for the files
const folderPath = __dirname+'/Files';
 
// GET request for single file
app.get('/single',function(req,res) {
    console.log('single file');
     
    // Download function provided by express
    res.download(folderPath+'/single_gfg.txt', function(err) {
        if(err) {
            console.log(err);
        }
    })
})
 
// GET request for multiple file download as zip
app.get('/multiple', function(req, res) {
    console.log('Multiple file download')
 
    // zip method which take file path
    // and name as objects
    res.zip([
           { path: folderPath+'/multiple_one_gfg.txt',
               name: 'one_gfg.txt'},
           { path: folderPath+'/multiple_two_gfg.txt',
               name: 'two_gfg.txt'},
           { path: folderPath+'/multiple_three_gfg.txt',
            name: 'three_gfg.txt'}
    ])
})
 
// GET request to the root of the app
app.get('/', function(req, res){
    res.sendFile(__dirname+'/index.html');
})
 
// Creating server at port 3000
app.listen(3000,function(req,res){
    console.log('Server started to listen at 3000');
})

第 5 步:现在使用您的终端运行该应用程序。

node app.js

输出:转到任何浏览器并输入http://localhost:3000

输出

您可以转到“下载”文件夹并解压缩 zip 文件夹。这就是我们在 Node.js 中使用express下载文件的方式