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实现阿里大鱼短信通知发送
Jan 17 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 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
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
JavaScript作用域链使用介绍
2013/08/29 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Pytorch之parameters的使用
2019/12/31 Python
python中pyqtgraph知识点总结
2021/01/26 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
财务部经理岗位职责
2014/02/03 职场文书
发展部经理职责规定
2014/02/22 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
活动总结书怎么写
2015/05/11 职场文书
CAD实训总结范文
2015/08/03 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
深入理解redis中multi与pipeline
2021/06/02 Redis
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
python装饰器代码解析
2022/03/23 Python