当前位置: 首页 > news >正文

nodejs + express 实现 http文件下载服务程序

nodejs + express 实现 http文件下载服务程序,

主要包括两个功能:指定目录的文件列表,某个文件的下载。

假设已经安装好 nodejs ;

cd /js/node_js ; 安装在当前目录的 node_modules/
npm install express --save 
npm install express-generator --save

D:\js> node node_js/node_modules/express-generator -e blog

   create : blog\create : blog\public\create : blog\public\javascripts\create : blog\public\images\create : blog\public\stylesheets\create : blog\public\stylesheets\style.csscreate : blog\routes\create : blog\routes\index.jscreate : blog\routes\users.jscreate : blog\views\create : blog\views\error.ejscreate : blog\views\index.ejscreate : blog\app.jscreate : blog\package.jsoncreate : blog\bin\create : blog\bin\www

cd blog

install dependencies:
     > npm install

npm notice created a lockfile as package-lock.json. You should commit this file.
added 54 packages from 38 contributors and audited 55 packages in 8.769s

编写模板文件 blog/views/files.ejs 如下

<!DOCTYPE html>
<html><head><title>下载文件选择</title></head><body><h1>请选择下载文件:</h1><% if(files.length>0) {%><ul><% files.forEach(function(file){ %><li><a href="/file/<%- file %>" target="_blank"><%- file %></a></li><%})%></ul><%} else {%><p>没有可下载文件…</p><%}%></body>
</html>

编写web服务程序  blog/expres_download.js 如下

//var http = require('http');
var express = require('express');
var fs = require('fs');
var path = require('path');
var logger = require('morgan');
var app = express();// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));// 首页
app.get('/', function(req,res){res.end('<a href="/files"> 文件列表 </a>');
});// 指定目录
const dir = "/Books";
// 显示指定目录的文件列表
app.get('/files', function(req, res, next) {// ls 文件目录//var filePath = path.join(__dirname, './');var filePath = path.join(dir, './');fs.readdir(filePath, function(err, results){if(err) throw err;if(results.length>0) {var files = [];results.forEach(function(file){if(fs.statSync(path.join(filePath, file)).isFile()){if (path.extname(file) === '.pdf'){files.push(file); //仅显示.pdf文件}}});res.render('files', {files:files});} else {res.end('当前目录下没有文件');}});
});// 实现文件下载
app.get('/file/:fileName', function(req, res, next) {  var fileName = req.params.fileName;var filePath = path.join(dir, fileName);var stats = fs.statSync(filePath);if(stats.isFile()){res.set({'Content-Type': 'application/octet-stream','Content-Disposition': 'attachment;','Content-Length': stats.size});//'Content-Disposition': 'attachment; filename='+encodeURI(fileName),fs.createReadStream(filePath).pipe(res);} else {res.end('404');}
});app.listen(8080, "127.0.0.1", function() {console.log('web server 正在运行 http://127.0.0.1:8080')
});

运行 node expres_download.js 

相关文章:

nodejs + express 实现 http文件下载服务程序

nodejs express 实现 http文件下载服务程序&#xff0c; 主要包括两个功能&#xff1a;指定目录的文件列表&#xff0c;某个文件的下载。 假设已经安装好 nodejs ; cd /js/node_js ; 安装在当前目录的 node_modules/ npm install express --save npm install express-gene…...

Qt多文本编辑器项目实战

0x00 引言 本文将详细讲解如何使用Qt实现一个多文本编辑器。涉及的话题包括&#xff1a;Qt框架基础、窗体布局、文本编辑、拓展功能等等。 在阅读本文之前&#xff0c;你需要掌握基本的C编程知识和Qt框架的使用方法。 0x01 新建Qt项目 在Qt Creator中&#xff0c;新建一个Q…...

CVE-2017-7529 Nginx越界读取内存漏洞

漏洞概述 当使用Nginx标准模块时&#xff0c;攻击者可以通过发送包含恶意构造range域的header请求&#xff0c;来获取响应中的缓存文件头部信息。在某些配置中&#xff0c;缓存文件头可能包含后端服务器的IP地址或其它敏感信息&#xff0c;从而导致信息泄露。 影响版本 Ngin…...

力扣每日一题136:只出现一次的数字

题目描述&#xff1a; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#…...

导航栏参考代码

导航栏参考代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>导航栏参考代码</title> </head> <body> <table width"858" border"0" align"center"><tr&g…...

区块链(11):java区块链项目之页面部分实现

addPeer.html <!DOCTYPE html> <html> <head><meta charset="utf-8"> <title>java区块链</title><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="styles…...

RootSIFT---SIFT图像特征的扩展

RootSIFT是论文 Three things everyone should know to improve object retrieval - 2012所提出的 A Comparative Analysis of RootSIFT and SIFT Methods for Drowsy Features Extraction - 2020 当比较直方图时&#xff0c;使用欧氏距离通常比卡方距离或Hellinger核时的性能…...

ChatGPT角色扮演教程,Prompt词分享

使用指南 1、可直复制使用 2、可以前往已经添加好Prompt预设的AI系统测试使用 https://ai.idcyli.comhttps://ai.idcyli.com 雅思写作考官 我希望你假定自己是雅思写作考官&#xff0c;根据雅思评判标准&#xff0c;按我给你的雅思考题和对应答案给我评分&#xff0c;并且按…...

zabbix监控——自定义监控内容

目录 自定义监控项步骤 案例 1、明确需要执行的命令 2、创建 zabbix 的监控项配置文件&#xff0c;用于自定义 key&#xff0c;并重启zabbix-agent2 3、.在服务端验证新建的监控项 4、在 Web 页面创建自定义监控项模板 1&#xff09;创建模板 2&#xff09;创建监控项 …...

中断机制-中断协商机制、中断方法

4.1 线程中断机制 4.1.1 从阿里蚂蚁金服面试题讲起 Java.lang.Thread下的三个方法: 4.1.2 什么是中断机制 首先&#xff0c;一个线程不应该由其他线程来强制中断或停止&#xff0c;而是应该由线程自己自行停止&#xff0c;自己来决定自己的命运&#xff0c;所以&#xff0c;…...

three.js入门 —— 实现第一个3D案例

前言&#xff1a; three.js入门&#xff0c;根据文档实现第一个3D案例 效果图&#xff1a; 代码实现&#xff1a; const scene new THREE.Scene();//创建一个长方体几何对象Geometryconst geometry new THREE.BoxGeometry(100, 100, 100);//创建一个网络基础材质的材质对象…...

《动手学深度学习 Pytorch版》 8.4 循环神经网络

8.4.1 无隐状态的神经网络 对于无隐藏装态的神经网络来说&#xff0c;给定一个小批量样本 X ∈ R n d \boldsymbol{X}\in\mathbb{R}^{n\times d} X∈Rnd&#xff0c;则隐藏层的输出 H ∈ R n h \boldsymbol{H}\in\mathbb{R}^{n\times h} H∈Rnh 通过下式计算&#xff1a; …...

什么是物联网阀控水表?

物联网阀控水表是一种新型的水表&#xff0c;结合了物联网技术和传统水表的功能&#xff0c;可以实现对水的计量、控制和管理。随着人们对水资源的日益重视&#xff0c;物联网阀控水表的应用越来越广泛&#xff0c;为水资源的合理利用和管理提供了有效手段。 物联网阀控水表是由…...

Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证

Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证。 kafka安全涉及3部份:传输加密,用户认证与授权,ZK开启ACL(Zookeeper存储了kafka的元数据以及用户信息,默认不开启acl所有用户可改,内网环境机器不对外开放可考虑使用默认不开启ZK ACL)。 官网地址:https://kafka.ap…...

关于智能控制领域中模糊控制算法的概述

智能控制领域中的模糊控制算法是一种基于模糊逻辑的控制策略&#xff0c;它通过对模糊集合的刻画来处理模糊信息&#xff0c;从而获得模糊输出并进行控制。模糊控制算法在实际控制工程中具有良好的应用前景&#xff0c;它不但具有较强的鲁棒性和适应性&#xff0c;而且可以为复…...

剖析伦敦银最新价格走势图

国际金融市场瞬息万变&#xff0c;伦敦银的价格走势会受到诸多因素的影响&#xff0c;比如重要经济数据的公布&#xff0c;国际间的政治博弈&#xff0c;突发的政经大事&#xff0c;都可以令白银价格的走势&#xff0c;在短时间内暴涨暴跌的情况。 要在伦敦银市场实现良好的收益…...

通用人工智能技术(深度学习,大模型,Chatgpt,多模态,强化学习,具身智能)

目录 前言 1.通用人工智能 1.1 生物学分析 1.2具身智能 1.2.1当前的人工智能的局限 1.2.2 具身智能实现的基础 1.2.3 强化学习&#xff08;决策大模型&#xff09; 2.结论 往期文章 参考文献 前言 目前的人工智能实质上只是强人工智能&#xff0c;或者说单个领域的通…...

makefile的特性-部分语法记录

1.变量定义 1.1 来实现a1 $(a2)a2 lib.o1.2 : 来实现, 这种不能通过后面的变量来定义a1 : $(a2) b.0a2 : lib.o1.3 来实现a1 b.0a2 a11.4 ? 来实现,这种方式前面如果定义了&#xff0c;后面定义则无效a1 : a.oa1 ? lib.o //结果 a1 a.o 2.文件查找 2.1 VPATH 目录…...

【Java 进阶篇】JavaScript 正则表达式(RegExp)详解

JavaScript 正则表达式&#xff0c;通常简写为 RegExp&#xff0c;是一种强大的文本匹配工具&#xff0c;它允许你通过一种灵活的语法来查找和替换字符串中的文本。正则表达式在编程中用途广泛&#xff0c;不仅限于 JavaScript&#xff0c;在许多编程语言中也都有类似的实现。 …...

51单片机之串口通信例程

51单片机之串口通信例程 简介原理例程 简介 串行通信是指使用一条数据线&#xff0c;将数据一位一位地依次传输&#xff0c;每一位数据占据一个固定的时间长度。在串行通信中&#xff0c;数据可以以字符为单位进行传输&#xff0c;也可以以帧为单位进行传输。 在51单片机中&a…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...