简单使用multer实现文件的上传和下载;

1、文件上传使用multer,首先要在项目中安装multer模块。

npm install multer -save

2、这里使用express模块,multer文件上传分为单文件和多文件,单文件使用如下;

(1)客户端代码,这里我们简单使用form表单提交,使用post方式,表单一定要设置enctype="multipart/form-data",否则会有意想不到的错误。

<h1>文件上传</h1>
<form action="/" method="post" enctype="multipart/form-data"><input id="files" type="file" name="file" multiple/> <!-- 这里的multiple属性是允许多文件上传的,单文件上传可以不写此属性(最好都写上)--><input type="submit" value="上传"/>
</form>

(2)客户端到这里就可以了,下面进行服务端配置,单文件要是用,single("在这里写表单里的name值")

let express = require('express');
let multer = require('multer');
let fs = require("fs");
let path = require("path");
let router = express.Router();router.post('/', multer({//设置文件存储路径dest: 'upload'   //upload文件如果不存在则会自己创建一个。}).single('file'), function (req, res, next) {if (req.file.length === 0) {  //判断一下文件是否存在,也可以在前端代码中进行判断。res.render("error", {message: "上传文件不能为空!"});return} else {let file = req.file;let fileInfo = {};console.log(file);fs.renameSync('./upload/' + file.filename, './upload/' + file.originalname);//这里修改文件名字,比较随意。// 获取文件信息fileInfo.mimetype = file.mimetype;fileInfo.originalname = file.originalname;fileInfo.size = file.size;fileInfo.path = file.path;// 设置响应类型及编码res.set({'content-type': 'application/json; charset=utf-8'});res.end("上传成功!");}});

3、下面则是多文件的使用,记住前面说的input表单multiple属性,

(1)客户端代码和上面一样

<h1>文件上传</h1>
<form action="/" method="post" enctype="multipart/form-data"><input id="files" type="file" name="file" multiple/> <!-- 这里的multiple属性是允许多文件上传的,一点要写--><input type="submit" value="上传"/>
</form>

(2)服务端的代码不使用single 而是使用.array("表单name属性","这里填写最大支持的文件数目"),使用方式如下


router.post('/', multer({//设置文件存储路径dest: 'upload'
}).array('file', 10), function (req, res, next) {  //这里10表示最大支持的文件上传数目let files = req.files;if (files.length === 0) {res.render("error", {message: "上传文件不能为空!"});return} else {let fileInfos = [];for (var i in files) {let file = files[i];let fileInfo = {};fs.renameSync('./upload/' + file.filename, './upload/' + file.originalname);//这里修改文件名。//获取文件基本信息fileInfo.mimetype = file.mimetype;fileInfo.originalname = file.originalname;fileInfo.size = file.size;fileInfo.path = file.path;fileInfos.push(fileInfo);}// 设置响应类型及编码res.set({'content-type': 'application/json; charset=utf-8'});res.end("success!");}
});

4、此时文件的简单上传实现了。当然这只是简单的进行上传,有时候还要考虑文件的大小,磁盘空间等等,当然上传文件也不只有一种,还有使用formidable, multiparty等,有兴趣可以查看官方文档详细介绍。上传文件当然就要有下载,有时候压缩文件可以直接通过a标签下载,但是有时如果是图片,之类的浏览器会直接打开,很不友好,所以有专门的下载。

4.1下载主要有两种方式,也比较简单,直接演示

//第一种方式let road="这里是要下载的文件路径(可以是中文,相对路径,绝对路径等等)";res.download(road); //直接调用download方法即可//第二种方式let road="这里是要下载的文件路径(可以是中文,相对路径,绝对路径等等)";let road = fs.createReadStream(path); //创建输入流入口res.writeHead(200, {'Content-Type': 'application/force-download','Content-Disposition': 'attachment; filename=name'});load.pipe(res);// 通过管道方式写入

作者:东东丶酱
原文链接:https://www.jianshu.com/p/42714ca7b6ce

node使用express+multer文件上传和下载的问题相关推荐

  1. multer 文件上传系统在express中的使用

    multer 文件上传系统在express中的使用 参考: 技术栈 Multer 是一个node.js中间件,用于处理 multipart/form-data类型的表单数据,主要用于上传文件. 在fo ...

  2. 文件上传与下载的场景梳理

    文件上传 单文件与多文件上传 利用 input 元素的 accept 属性限制上传文件的类型.比如使用 image/* 限制只能选择图片文件: 同时,为了防止修改文件后缀绕过限制,需要利用 JS 读取 ...

  3. Angular 文件上传与下载

    Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...

  4. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  5. Python实现阿里云aliyun服务器里的文件上传与下载

    Python实现阿里云服务器里的文件上传与下载 Python实现阿里云服务器里的文件上传与下载 背景: 正文: 预备环境: 构想: 实现: 注意: 结尾 018.4.15 背景: 老实说,因为现实的各 ...

  6. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  7. php从ftp下载文件到本地,php使用ftp实现文件上传与下载功能

    本文实例为大家分享了php ftp文件上传与下载的具体代码,供大家参考,具体内容如下 ftp文件上传 php自带有ftp操作的函数包,一个比较简单实现的ftp文件上传操作可以通过以下几个步骤来完成: ...

  8. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

    效果图 上传文件页面: 下载文件页面:   1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="t ...

  9. PHP文件上传,下载,Sql工具类!

    PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用 前台 upload.html <!DOCTYPE html> <html> & ...

最新文章

  1. pandas版xml json excel互转
  2. 利用流水线改进代码中的if处理流程
  3. FATFS配置长文件名,为何跟编码转换有关
  4. catia v5法矢数据软件_catia介绍
  5. easyUI 日期控件修改...
  6. 服务器内存延迟,内存带宽、延迟性能测试
  7. [20150508]列顺序问题.txt
  8. redis主从和持久化
  9. 凤凰刷机,强刷 Flashing finalization failed
  10. GEE(Google Earth Engine)批量导入谷歌云盘
  11. 创客匠人直播升级服务,打造主流直播课堂​
  12. 思科CCNP在OSPF中设置LSA的简单命令汇总
  13. 搭建一个专属于两个人的爱情网站,记录生活中的点点滴滴
  14. SpringBoot - 错误: 找不到或无法加载主类
  15. DoIP专栏 - DoIP协议组成
  16. 瞄准前沿科技,美团是不务正业还是另有所图?
  17. RISC-V指令系统
  18. 计算机里面有鬼的恐怖游戏,胆小勿入!盘点史上十大最恐怖电脑游戏
  19. 2. Excel数据格式
  20. PolarDB-X 开源分布式数据库在韵达科技的应用实践

热门文章

  1. ue 编写linux脚本,通过什么工具编写shell脚本更方面直观
  2. 淘宝UED设计流程理解
  3. Thread.currentThread().getName()
  4. 安装superset(详细版)
  5. ensp 模拟器配置无线网络
  6. 在Windows10上通过Virtualbox安装Ubuntu操作系统教程
  7. PHP对接网络游戏防沉迷实名认证系统
  8. CentOS 7 快速搭建JavaWeb开发环境并部署Spring boot项目(纯干货、详细)
  9. Java jbcl.jar下载
  10. 小学教师资格证笔试答题模板