node+express+static完成简单的文件下载

不多说什么,直接上代码

var express = require(‘express‘);
var fs = require(‘fs‘)
var path= require(‘path‘);
var cors = require(‘cors‘);

var app = express();
app.use(cors());  

var options = {
  dotfiles: ‘ignore‘,
  etag: false,
  extensions: [‘htm‘, ‘html‘],
  index: false,
  maxAge: ‘1d‘,
  redirect: false,
  setHeaders: function (res, path, stat) {
    res.set(‘x-timestamp‘, Date.now())
  }
}
app.use(express.static(‘public‘, options));

app.get(‘/download‘,function(req, res, next){
    var currDir = path.normalize(req.query.dir),
        fileName = req.query.name,
        currFile = path.join(currDir,fileName),
        fReadStream;
        console.log(currDir );
        console.log(fileName );
    fs.exists(currFile,function(exist) {
        if(exist){
            res.set({
                "Content-type":"application/octet-stream",
                "Content-Disposition":"attachment;filename="+encodeURI(fileName)
            });
            fReadStream = fs.createReadStream(currFile);
            fReadStream.on("data",function(chunk){res.write(chunk,"binary")});
            fReadStream.on("end",function () {
                res.end();
            });
        }else{
            res.set("Content-type","text/html");
            res.send("file not exist!");
            res.end();
        }
    });
});
app.listen(8088, function(){

    console.log(‘localhsot:8080‘)
});

使用方法:localhost:8080/download?dir=‘filedir‘&name=‘filename‘,把这个直接放到a标签的href属性内就可以使用。

      dir:文件路径

      name:文件名称(带后缀)

时间: 2024-09-29 06:29:06

node+express+static完成简单的文件下载的相关文章

应用node+express+mysql 实现简单的增删改查

记录下来备忘 1.准备好webstrom编辑器,编辑器调整字体大小等在file->settings->editor下设置 注册码 来源网上: 2017.2.27更新 选择"license server" 输入:http://idea.imsxm.com/ 2.准备好 mysql 因为我本机有安装xampp 所以不需要单独准备mysql数据库 如果没有需要安装,安装了mysql的Navicat Premium管理工具. 3.查看下本机node和express是否安装 版本no

Node.js(express) + MongoDB(mongoose) 简单开发(一)

前言: express作为一个Node框架,很适合新学习Node的同学,加上mongoose的数据处理,堪称完美~ 闲话少说,步入正题. 我的系统环境: Win7 64bit Nodejs: v0.10.35 Npm: 1.4.28 IDE:webstorm 1. 建立项目 Node及express的安装这里就不再赘述,网上有很多安装的教程,不会的同学可以自行查找,这里我们采用express4.x版本 安装express库完成之后,我们可以使用express命令来建立一个自己的项目: expre

node框架express里面静态文件中间件express.static,根据路径名查找文件

- 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 express.static('/设置一下请求路径/路径名','要被查找文件夹的绝对路径') 请求路径后面跟着的路径名和静态文件的根文件下面的文件名字一致,返回页面 let express =require('express'); let path=require('path') let app=exp

Express细节探究(1)——app.use(express.static)

express相信是很多人用nodejs搭建服务器的首选框架,相关教程有很多,也教会了大家来如何使用.如果你想更深的了解他的细节,不妨和我一起来研究一下. 先来看一个每个人都用到的方法app.use(express.static(__dirname+'/public')); 你肯定在你的app文件中这么用过它: app.use(express.static(__dirname + '/public'));//设置静态文件目录 正如注释中写的那样,这句话的意思是,将静态文件目录设置为项目根目录+/

零基础实现node+express个性化聊天室

本篇文章使用node+express+jquery写一个个性化聊天室,一起来get一下~(源码地址见文章末尾) 效果图 项目结构 实现功能 登录检测 系统自动提示用户状态(进入/离开) 显示在线用户 支持发送和接收消息 自定义字体颜色 支持发送表情 支持发送图片 下面将一一讲解如何实现 前期准备 node及npm环境.express.socket.io 具体实现 1.将聊天室部署到服务器 先用node搭建一个服务器,部署在localhost:3000端口,先尝试向浏览器发送一个"hello wo

Webpact打包React后端Node+Express

Webpact打包React后端Node+Express 前言 React官方推荐用Browserify或者Webpack 来开发React组件. Webpack 是什么?是德国开发者 Tobias Koppers 开发的模块加载器.Instagram 工程师认为这个方案很棒, 似乎还把作者招过去了.在 Webpack 当中, 所有的资源都被当作是模块, js, css, 图片等等..Webpack 都有对应的模块 loader,如下文中将用到jsx-loader来加载带react语法的js文件

node+express+http-proxy-middleware做代理

最近,不赶着做项目,于是想着怎样做公司的前后端分离,这个时候想到了nodejs,于是打算今天做一个代理的demo,其实代码很简单,但是一直卡在一个地方,现在问题解决了,贴上代码和截图. html <!DOCTYPE html> <html> <head> <title>首页</title> <meta charset="utf-8"> <script type="text/javascript&qu

Node+Express+node-mysql 实战于演习 全套mysql(增删改查)

最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+node-mysql快速搭建的一套增删改查,视图模板是jade,基本上都是现在能用的到的技术,市面上的实例也特别少,有用的又不新,所以自己写一个 基本工作 首先我们准备一些基本的,因为我是用mysql麻烦可以自己装一下mysql,去官网可以下各种操作系统的安装包. 实例就一张表,下面是这张表的建表语句 S

node+express+mongodb初体验

从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整个学习思路,以下是我的学习分享,是入门级学习体验适合node+mongodb开发小白,node已玩过很久的大神这篇文章可能不适合. 开篇来个例子: 客户端表单页面: <!DOCTYPE HTML> <html lang="en-US"> <head> &