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的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 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获取json数据所有的节点路径
2015/05/17 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
numpy基础教程之np.linalg
2019/02/12 Python
python 实现视频 图像帧提取
2019/12/10 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
员工培训心得体会
2013/12/30 职场文书
捐书活动总结
2014/05/04 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
医院营销工作计划
2015/01/16 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
德能勤绩工作总结
2015/08/11 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
python文件与路径操作神器 pathlib
2022/04/01 Python
关于Redis的主从复制及哨兵问题
2022/06/16 Redis