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 相关文章推荐
14款NodeJS Web框架推荐
Jul 11 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
nodejs实现百度舆情接口应用示例
Feb 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
限制复选框的最大可选数
2006/07/01 Javascript
可以支持多中格式的JS键盘
2007/05/02 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
python 6行代码制作月历生成器
2020/09/18 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
结构和类有什么异同
2012/07/16 面试题
新闻学专业应届生求职信
2013/11/08 职场文书
护士检查书
2014/01/17 职场文书
报社实习生自荐信
2014/01/24 职场文书
户外拓展活动方案
2014/02/11 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
绩效管理实施方案
2014/03/19 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
详解 TypeScript 枚举类型
2021/11/02 Javascript