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中的非阻塞方法介绍
Jun 05 NodeJs
nodejs中使用monk访问mongodb
Jul 06 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 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中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php验证码实现代码(3种)
2015/09/07 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
jsTree使用记录实例
2016/12/01 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
浅析Python多线程下的变量问题
2015/04/28 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python扩展内置类型详解
2018/03/26 Python
Python使用folium excel绘制point
2019/01/03 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
Python colormap库的安装和使用详情
2020/10/06 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
2015年网络舆情工作总结
2015/07/24 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL