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

这篇具有很好参考价值的文章主要介绍了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.css
   create : blog\routes\
   create : blog\routes\index.js
   create : blog\routes\users.js
   create : blog\views\
   create : blog\views\error.ejs
   create : blog\views\index.ejs
   create : blog\app.js
   create : blog\package.json
   create : 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 文章来源地址https://www.toymoban.com/news/detail-732344.html

到了这里,关于nodejs + express 实现 http文件下载服务程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于 HTTP Range 实现文件分片并发下载!

    目录 前言 基础下载功能 进阶下载功能 单片下载 多片下载  浏览器发送预检(preflight)请求 express 不支持多段 range multipart/** 搭配 boundary=** 分片下载功能 “只读的” ArrayBuffer 对象 DataView 子类 Uint8Array 操作二进制数据 Blob + createObjectURL 创建 url 全部代码 通用的文件分片下载

    2024年02月10日
    浏览(57)
  • 三分钟用Golang搭建一个HTTP文件上传下载服务器

    简单需要一个文件服务器来传递数据,只要两个功能,一个上传接口,一个下载接口。 选用go http模块实现,比nginx、ftp等更方便快捷。 上传接口\\\"/v1/file_upload/\\\" 上传接口增加简单BasicAuth鉴权 上传成功返回下载URL json格式返回 只想文件上传服务器测试接口,以下电梯直达即可

    2024年02月11日
    浏览(70)
  • C/C++ 通过HTTP实现文件上传下载

    WinInet(Windows Internet)是 Microsoft Windows 操作系统中的一个 API 集,用于提供对 Internet 相关功能的支持。它包括了一系列的函数,使得 Windows 应用程序能够进行网络通信、处理 HTTP 请求、FTP 操作等。WinInet 提供了一套完整的网络通信工具,使得开发者能够轻松地构建支持网络功

    2024年02月19日
    浏览(48)
  • lazarus、delphi文件Http下载断点续传的实现

    下载大文件时,断点续传是很有必要的,特别是网速度慢且不稳定的情况下,很难保证不出意外,一旦意外中断,又要从头下载,会很让人抓狂。断点续传就能很好解决意外中断情况,再次下载时不需要从头下载,从上次中断处继续下载即可,这样下载几G或十几G大小的一个

    2024年02月13日
    浏览(54)
  • 【Java实战】Feign调用文件下载服务接口实现文件下载功能

    最近需要实现Feign调用服务提供者的文件下载接口,进行文件下载功能,这里对功能的实现做一个简单的记录 通过调用服务提供者的文件下载接口,将文件传输的流数据通过 feign.Response 来接收,服务消费者再将数据转化 首先,在项目中引入Feign的依赖。你可以使用Maven进行管

    2024年02月12日
    浏览(80)
  • Spring Boot实现HTTP大文件断点续传分片下载-大视频分段渐进式播放

    服务端如何将一个大视频文件做切分,分段响应给客户端,让浏览器可以渐进式地播放。 Spring Boot实现HTTP分片下载断点续传,从而实现H5页面的大视频播放问题,实现渐进式播放,每次只播放需要播放的内容就可以了,不需要加载整个文件到内存中。 文件的断点续传、文件多

    2024年02月14日
    浏览(75)
  • 关于使用Feign来实现微服务之间的文件下载

    在微服务当中,不同的服务之间需要进行通信,不乏微服务之间使用feign进行文件的下载上传使用场景。下边介绍如何使用Feign来进行微服务之间的下载excel 背景 :前两天做的一个需求,需要专门为材积信息而新启一个服务,其他系统调用此服务来进行获取产品的一些材积信

    2024年02月14日
    浏览(65)
  • Spring-Boot实现HTTP大文件断点续传分片下载-大视频分段渐进式播放

    服务端如何将一个大视频文件做切分,分段响应给客户端,让浏览器可以渐进式地播放。 Spring Boot实现HTTP分片下载断点续传,从而实现H5页面的大视频播放问题,实现渐进式播放,每次只播放需要播放的内容就可以了,不需要加载整个文件到内存中。 文件的断点续传、文件多

    2024年02月11日
    浏览(56)
  • Vue3 - 详细实现下载从服务端返回的文件流 Blob 对象教程,前端下载后端接口返回的文件流并自动保存到本地,支持任何格式的文件下载(从后端拿到二进制文件流 Blob 对象,前端实现点击下载功能)

    调用服务端(后端)接口拿到文件流,通过前端下载并保存到本地。 本文 实现了在 vue3 项目中,通过后端接口返回的二进制文件流 Blob 对象,在前端进行点击下载并保存到用户本地,任何格式的文件都可以轻松下载, 保证您直接复制代码,改个请求地址就可以使用了, 如下

    2024年02月04日
    浏览(211)
  • 【前端面试】中大文件上传/下载:中等文件代理服务器放行+大文件切片传输+并发请求+localstorage实现断点续传

    目录 切片上传~spark-md5 原理:流式计算+分块处理 文件标识spark-md5:A-B A.切片哈希值合并 B.首尾切片+其他切片前中后各取2M 计算hash:A-B(参考React的Fiber架构) A.线程:web-worker B.空闲:requestIdleCallback 异步并发控制:A-B(参考http2的多路复用) A.promise.allSettled() B.并发数max=

    2024年02月12日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包