我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Node.js实现下载文件的两种实用方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Node.js实现下载文件的两种实用方式

第一种方式:使用原生的http模块

我们仅需要用到fshttp两个node.js的原生模块,不需要安装第三方模块,就可以实现文件的下载。代码如下:

var fs = require('fs');
var http = require("http");

var server = http.createServer();

server.on("request", function (request, response) {
    // 获取请求URL
    var url = request.url;
    // 如果是下载文件的URL,则判断进行处理
    if (url === '/download/hello.txt') {
        // 提取文件名hello.txt
        var name = url.substring(url.lastIndexOf('/'));
        // 创建可读流,读取当前项目目录下的hello.txt文件
        var rs = fs.createReadStream(__dirname + "/" + name);
        // 设置响应请求头,200表示成功的状态码,headers表示设置的请求头
        response.writeHead(200, {
            'Content-Type': 'application/force-download',
            'Content-Disposition': 'attachment; filename=' + name
        });
        // 将可读流传给响应对象response
        rs.pipe(response);
    }
});

server.listen(8888, function () {
    console.log("服务器启动成功,可以通过 http://127.0.0.1:8888 来进行访问");
});

然后可以通过http://127.0.0.1:8888/download/hello.txt下载文件。

第二种方式:使用Express+Axios下载文件

前端通过axios发送GET或者POST请求来进行文件的下载,关键是对响应回来的文件数据进行处理。

index.html:前端页面,通过点击按钮来进行下载文件,而请求是通过axios来发送的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!-- 引入axios.js -->
    <script class="lazy" data-src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<button onclick="downloadFile()">下载</button>
</body>
<script>
    function downloadFile() {
        axios({
            url: '/file/download',
            method: 'POST',
            responseType: 'blob'
        }).then(function (response) {
            // 将响应回来的数据下载为文件,固定代码
            // 将响应数据处理为Blob类型
            var blob = new Blob([response.data]);
            // 创建一个URL对象
            var url = window.URL.createObjectURL(blob);
            // 创建一个a标签
            var a = document.createElement("a");
            a.href = url;
            a.download = "hello.txt";// 这里指定下载文件的文件名
            a.click();
            // 释放之前创建的URL对象
            window.URL.revokeObjectURL(url);
        }).catch(function (reason) {
            console.log(reason)
        })
    }
</script>
</html>

index.js:使用express来渲染index.html页面,并且来处理下载请求。

var fs = require('fs');
var express = require('express');

var app = express();

// 渲染index.html,跟下载逻辑无关
app.get('/index.html', function (request, response) {
    fs.readFile('index.html', function (err, data) {
        if (!err) {
            response.end(data);
        }
    });
});

// 处理下载文件的请求
app.post('/file/download', function (request, response) {
    var name = "hello.txt";// 待下载的文件名
    var path = __dirname + "/" + name;// 待下载文件的路径,指定为当前项目目录下的hello.txt文件
    var f = fs.createReadStream(path);
    response.writeHead(200, {
        'Content-Type': 'application/force-download',
        'Content-Disposition': 'attachment; filename=' + name
    });
    f.pipe(response);
});

// 监听端口,相当于原来的server.listen()
app.listen(8888, function () {
    console.log("app is running at port 8888.");
});

又可以通过response.set()方法来设置响应头:

    response.set({
        'Content-Type': 'application/octet-stream',// 告诉浏览器这是一个二进制文件
        'Content-Disposition': 'attachment; filename=' + name// 告诉浏览器这是一个需要下载的文件
    });

总结

下载文件其实很简单,在哪种语言里都是这样:

第一步,设置响应头。第二步,返回数据流。

设置响应头

下载文件需要设置的响应头是Content-TypeContent-Disposition,响应头与编程语言无关,是通用的。

'Content-Type': 'application/octet-stream'表示这是一个二进制文件。

'Content-Disposition': 'attachment;filename=hello.txt'表示这是一个需要下载的附件,并且告诉浏览器默认文件名。

返回数据流

读取要下载的文件,以二进制流的形式响应给客户端。

到此这篇关于Node.js实现下载文件的两种实用方式的文章就介绍到这了,更多相关Node.js下载文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Node.js实现下载文件的两种实用方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java实现文件下载的两种方式

本文实例为大家分享了java实现文件下载的具体代码,供大家参考,具体内容如下public HttpServletResponse download(String path, HttpServletResponse response) {
2023-05-30

Java实现下载文件的6种方式

1. 使用URL类的openStream()方法下载文件:```javaURL url = new URL(fileUrl);InputStream inputStream = url.openStream();FileOutputStre
2023-08-08

python实现下载文件的三种方法

Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块。当然你也可以利用ftplib从ftp站点下载文件。此外Python还提供了另外一种方法requests。下面来看看三种方法是如何
2022-06-04

浅析Node.js实现HTTP文件下载

前言 HTTP实现文件下载时,只要在服务器设置好相关响应头,并使用二进制传输文件数据即可,而客户端(浏览器)会根据响应头接收文件数据。而在Node.js中,设置好响应头后,读取文件流,再使用“.pipe()”方法将流转接到响应对象Respo
2022-06-04

Node.js编写组件的三种实现方式

首先介绍使用v8 API跟使用swig框架的不同: (1)v8 API方式为官方提供的原生方法,功能强大而完善,缺点是需要熟悉v8 API,编写起来比较麻烦,是js强相关的,不容易支持其它脚本语言。 (2)swig为第三方支持,一个强大的组
2022-06-04

java实现文件下载的方式有哪些

在Java中,可以使用以下方式实现文件下载:使用URL和URLConnection类:可以通过创建URL对象,然后打开连接并获取输入流,将输入流写入输出流实现文件下载。URL url = new URL(fileUrl);HttpURLC
java实现文件下载的方式有哪些
2024-04-08

mybatis 加载配置文件的方法(两种方式)

一. 使用sqlSessionFactory 的 mapperLocations 进行加载, 2023-05-30

PHP中怎么用流方式实现下载文件

这篇文章主要讲解了“PHP中怎么用流方式实现下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中怎么用流方式实现下载文件”吧!PHP 中使用流方式下载文件在 PHP 中,可以使用
2023-07-05

Python简单实现安全开关文件的两种方式

本文实例讲述了Python简单实现安全开关文件的两种方式。分享给大家供大家参考,具体如下: 以下代码经Python3.3测试。 方式1:try:file = open('config.ini', 'w')print("It's a text
2022-06-04

jsp 实现上传文件的两种方法

在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发.........[@more@]在用Java开发企业器系统的使用,特别
2023-06-03

python调用excel_vba的两种实现方式

本文主要介绍了python调用excel_vba的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-29

SpringBoot实现文件下载功能的方式分享

这篇文章主要为大家详细介绍了SpringBoot这哪个实现文件下载功能的几种方式,文中的实现方法简介易懂,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-23

Android中button实现onclicklistener事件的两种方式

代码如下: package com.demos; import android.app.Activity; import android.os.Bundle; import android.view.View; import android
2022-06-06

编程热搜

目录