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代码片段
Feb 04 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 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
DOMXML函数笔记
2006/10/09 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
Python高并发和多线程有什么关系
2020/11/14 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
美国最大点评网站:Yelp
2018/02/14 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
internal修饰符起什么作用
2013/12/16 面试题
2015年化验室工作总结
2015/04/23 职场文书
酒桌上的开场白
2015/06/01 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python