• 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

    1. create : blog\
    2. create : blog\public\
    3. create : blog\public\javascripts\
    4. create : blog\public\images\
    5. create : blog\public\stylesheets\
    6. create : blog\public\stylesheets\style.css
    7. create : blog\routes\
    8. create : blog\routes\index.js
    9. create : blog\routes\users.js
    10. create : blog\views\
    11. create : blog\views\error.ejs
    12. create : blog\views\index.ejs
    13. create : blog\app.js
    14. create : blog\package.json
    15. create : blog\bin\
    16. 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 如下

    1. html>
    2. <html>
    3. <head>
    4. <title>下载文件选择title>
    5. head>
    6. <body>
    7. <h1>请选择下载文件:h1>
    8. <% if(files.length>0) {%>
    9. <ul>
    10. <% files.forEach(function(file){ %>
    11. <li>
    12. <a href="/file/<%- file %>" target="_blank"><%- file %>a>
    13. li>
    14. <%})%>
    15. ul>
    16. <%} else {%>
    17. <p>没有可下载文件…p>
    18. <%}%>
    19. body>
    20. html>

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

    1. //var http = require('http');
    2. var express = require('express');
    3. var fs = require('fs');
    4. var path = require('path');
    5. var logger = require('morgan');
    6. var app = express();
    7. // view engine setup
    8. app.set('views', path.join(__dirname, 'views'));
    9. app.set('view engine', 'ejs');
    10. app.use(logger('dev'));
    11. app.use(express.json());
    12. app.use(express.urlencoded({ extended: false }));
    13. app.use(express.static(path.join(__dirname, 'public')));
    14. // 首页
    15. app.get('/', function(req,res){
    16. res.end(' 文件列表 ');
    17. });
    18. // 指定目录
    19. const dir = "/Books";
    20. // 显示指定目录的文件列表
    21. app.get('/files', function(req, res, next) {
    22. // ls 文件目录
    23. //var filePath = path.join(__dirname, './');
    24. var filePath = path.join(dir, './');
    25. fs.readdir(filePath, function(err, results){
    26. if(err) throw err;
    27. if(results.length>0) {
    28. var files = [];
    29. results.forEach(function(file){
    30. if(fs.statSync(path.join(filePath, file)).isFile()){
    31. if (path.extname(file) === '.pdf'){
    32. files.push(file); //仅显示.pdf文件
    33. }
    34. }
    35. });
    36. res.render('files', {files:files});
    37. } else {
    38. res.end('当前目录下没有文件');
    39. }
    40. });
    41. });
    42. // 实现文件下载
    43. app.get('/file/:fileName', function(req, res, next) {
    44. var fileName = req.params.fileName;
    45. var filePath = path.join(dir, fileName);
    46. var stats = fs.statSync(filePath);
    47. if(stats.isFile()){
    48. res.set({
    49. 'Content-Type': 'application/octet-stream',
    50. 'Content-Disposition': 'attachment;',
    51. 'Content-Length': stats.size
    52. });
    53. //'Content-Disposition': 'attachment; filename='+encodeURI(fileName),
    54. fs.createReadStream(filePath).pipe(res);
    55. } else {
    56. res.end('404');
    57. }
    58. });
    59. app.listen(8080, "127.0.0.1", function() {
    60. console.log('web server 正在运行 http://127.0.0.1:8080')
    61. });

    运行 node expres_download.js 

  • 相关阅读:
    06_android gradle中的build依赖项简介(笔记篇)
    触摸屏与施耐德PLC之间MODBUS无线通讯
    Python核心数据类型
    [附源码]计算机毕业设计springboot小太阳幼儿园学生管理系统
    计算机毕业设计java+ssm舞蹈管理系统(源码+系统+mysql数据库+Lw文档)
    本周总结(11.21-11.27)
    计算机网络(二) | 网络编程基础、Socket套接字、UDP和TCP套接字编程)
    JavaScript随手笔记---保留小数位
    ASP.NET程序设计 ——琴社网站
    真正的成长没有速成剂,都是风吹雨打过来的
  • 原文地址:https://blog.csdn.net/belldeep/article/details/133818526