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服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
浅谈Node的内存泄露问题
May 06 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 Mssql操作简单封装支持存储过程
2009/12/11 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
php类自动加载器实现方法
2015/07/28 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
js innerHTML 改变div内容的方法
2013/08/03 Javascript
js读取cookie方法总结
2014/10/31 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
Python实现的数据结构与算法之队列详解
2015/04/22 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
python画图常规设置方式
2020/03/05 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
2014道德模范事迹材料
2014/02/16 职场文书
医院见习报告范文
2014/11/03 职场文书
初三语文教学计划
2015/01/22 职场文书
离婚财产分割协议书
2015/08/11 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS