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读取memcache示例分享
Jan 02 NodeJs
跟我学Nodejs(二)--- Node.js事件模块
May 21 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
详解Nodejs之npm&amp;package.json
Jun 15 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 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中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP单链表的实现代码
2016/07/05 PHP
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
Python中asyncore的用法实例
2014/09/29 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
PyTorch预训练的实现
2019/09/18 Python
Python socket聊天脚本代码实例
2020/01/02 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
物价局领导班子四风问题整改措施
2014/10/26 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Django框架中模型的用法
2022/06/10 Python