nodejs multer实现文件上传与下载


Posted in NodeJs onMay 10, 2017

本文实例为大家分享了nodejs实现文件上传下载的具体代码,供大家参考,具体内容如下

1.介绍

做了一个关于文件上传和下载的demo ,选择了Multer 作为中间件进行数据处理。

关于multer请参考中文翻译文档 https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md 或者官方文档

2. upload 文件上传

html form标签内设置enctype=”multipart/form-data”是必须的,这样才可以上传文件,方式为post ,在服务端使用multer时,基本与官网相同,引用中间件multer,app.post(‘\upload',upload.single(‘name'),function(){}); 指定单文件上传,参数是html的input里面的name ,这样就可以上传成功,但是问题是multer不会管你的后缀,上传到upload文件夹的文件有一个乱序名称但是没有后缀,所以我增加了这个功能。

req.file是文件信息,取得原名称,经过数组以及堆栈等处理得到后缀'.jpg' , 用fs.renameSync()方法重命名文件,加上本来的后缀。这样真正的上传成功。唯一的缺点是没有实现改变文件名字,使用官网方式出现了错误,所以没有深究。。

3.download 文件下载

网上基本上是express对res.download的封装以及fs方法为主,注意要把文件夹设定为静态文件。出现的问题是点击之后就会在新页面显示要下载的文件,无论是图片还是音乐。。这让我很困扰,但是找了很久也没有很好的解决。用IE访问结果是会出现下载还是查看的选项。。很迷。总之就是这样了,一晚上的努力,我很满足。。嘻嘻

服务端

//index.js

var fs = require('fs')
var express = require('express')
var multer = require('multer')
const path = require('path');

 var app = express();
 var upload = multer({dest:'upload/'});

//多文件上传 (限定上传文件个数)(没有修改后缀)
app.post('/upload-multi',upload.array('myfile',2),function(req,res,next){
  res.send("2 done");
})
//单文件上传获取信息
app.post('/upload-single',upload.single('myfile'),function(req,res,next){
  var file=req.file;
  // console.log("名称:%s",file.originalname);
  // console.log("mime:%s",file.mimetype);
//以下代码得到文件后缀
  name=file.originalname;
  nameArray=name.split('');
  var nameMime=[];
  l=nameArray.pop();
  nameMime.unshift(l);
  while(nameArray.length!=0&&l!='.'){
  l=nameArray.pop();
  nameMime.unshift(l);
  }
//Mime是文件的后缀
  Mime=nameMime.join('');
  console.log(Mime);
  res.send("done");
//重命名文件 加上文件后缀
  fs.renameSync('./upload/'+file.filename,'./upload/'+file.filename+Mime);

})

//文件下载尝试(chrome会直接在页面上展示。.最后也没有解决)
//设置download文件夹为静态 才能下载
 app.use('/download', express.static(path.join(__dirname, 'download')));
// app.get('/download',function(req,res){
//   var path='./download/aa.mp3';
//   res.download(path,'aa.mp3');
// });
app.get('/download', function(req, res){
 var file = __dirname + '/download/aa.mp3';
 res.download(file); 
});
app.get('/',function(req,res,next){
  res.sendFile(__dirname+"/index.html");
})

app.listen(3000);

客户端

//index.html

<!DOCTYPE html>
<html>
<head>
  <title>上传文件</title>
  <meta charset="utf-8">
</head>
<body>
<form enctype="multipart/form-data" action="/upload-single" method="post">
<input type="file" name="myfile"></input>
<input type="submit" value="提交"></input>
</form>

<form enctype="multipart/form-data" action="/upload-multi" method="post">
<input type="file" name="myfile"></input>
<input type="file" name="myfile"></input>
<input type="submit" value="提交"></input>
</form>
<a href="download/aa.mp3" rel="external nofollow" >下载文件</a>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
跟我学Nodejs(三)--- Node.js模块
May 25 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
Nodejs之http的表单提交
Jul 07 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
图解NodeJS实现登录注册功能
Sep 16 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
nodejs处理图片的中间件node-images详解
May 08 #NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 #NodeJs
win系统下nodejs环境安装配置
May 04 #NodeJs
Nodejs--post的公式详解
Apr 29 #NodeJs
NodeJs的fs读写删除移动监听
Apr 28 #NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 #NodeJs
NodeJs模拟登陆正方教务
Apr 28 #NodeJs
You might like
第五节 克隆 [5]
2006/10/09 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
深入浅析Node.js单线程模型
2017/07/10 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python机器学习实现决策树
2019/11/11 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
计算机专业自我鉴定
2013/10/15 职场文书
自考自我鉴定范文
2013/10/30 职场文书
初中科学教学反思
2014/01/21 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2015年招生工作总结
2015/05/04 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
Python实现Hash算法
2022/03/18 Python