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学习笔记之网络编程
Aug 03 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
详解nodejs http请求相关总结
Mar 31 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 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向函数传递可变参数的区别实例代码
2011/05/18 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP正则验证Email的方法
2015/06/15 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
layui分页效果实现代码
2017/05/19 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
JS中的函数与对象的创建方式
2019/05/12 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
小小聊天室Python代码实现
2016/08/17 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python简单验证码识别的实现方法
2019/05/10 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
linux面试题参考答案(11)
2016/11/26 面试题
Ajxa常见问题都有哪些
2014/03/26 面试题
英文请假条
2014/04/11 职场文书
电钳工人个人求职信
2014/05/10 职场文书
爱国口号
2014/06/19 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL