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 03 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
NodeJs模拟登陆正方教务
Apr 28 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 NodeJs
在nodejs中创建child process的方法
Jan 26 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
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
javascript间隔刷新的简单实例
2013/11/14 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
js中的面向对象入门
2017/03/06 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python图像处理之镜像实现方法
2015/05/30 Python
简单的python后台管理程序
2017/04/13 Python
Django在win10下的安装并创建工程
2017/11/20 Python
python制作图片缩略图
2019/04/30 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
Python jieba库分词模式实例用法
2021/01/13 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
粗加工管理制度
2014/02/04 职场文书
个人欠款担保书
2014/05/20 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
技术员岗位职责范本
2015/04/11 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏