Node.js + express实现上传大文件的方法分析【图片、文本文件】


Posted in Javascript onMarch 14, 2019

本文实例讲述了Node.js + express实现上传大文件的方法。分享给大家供大家参考,具体如下:

对于大文件的上传我们首先要引入一个叫做 multer 的库:

npm install --save multer

关于这个库,大家可以查阅官方文档:

点击跳转 https://www.npmjs.com/package/multer

我们先将库引入我们的项目中:

var multer = require('multer')
var upload = multer({ dest: 'uploads/' })// 文件会上传到这个目录

具体的 get 方法:

app.post('/upload', upload.single('logo'), function(req, res){//发送 json 数据到这个路由
  console.dir(req.file);
  res.send(req.p);
})

由于上传文件要用到表当,所以我们这里先建立一个名为 form 表单:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
  <form action="/upload" method="post" enctype="multipart/form-data">
    <h2>单图上传</h2>
    <input type="file" name="logo">
    <input type="submit" value="提交">
  </form>
<body>
</body>
</html>

然后我们在 server 中引入该表单:

var fs = require('fs')
// /from 的 html 界面,用于演示上传文件
app.get('/form',function(req, res){
  var form = fs.readFileSync('./form.html',{ encoding : "utf8"});
  res.send(form);
})

由 localhost:3000/form 运行后上传文件,就能在你项目的upload目录下可看到:

Node.js + express实现上传大文件的方法分析【图片、文本文件】

Node.js + express实现上传大文件的方法分析【图片、文本文件】

虽然上传成功,但w我n看到文件名是混乱的,而且路径也是固定:

修改路径和文件名:

// 更改大文件的存储路径
var createFolder = function(folder){
  try{
    fs.accessSync(folder);
  }catch( e ){
    fs.mkdirSync(folder);
  }
};
var uploadFolder = './upload/';// 设定存储文件夹为当前目录下的 /upload 文件夹
createFolder(uploadFolder);
// 磁盘存贮
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, uploadFolder );// 他会放在当前目录下的 /upload 文件夹下(没有该文件夹,就新建一个)
  },
  filename: function (req, file, cb) {// 在这里设定文件名
    cb(null, file.originalname );
  }
})
var upload = multer({ storage: storage })

效果:

Node.js + express实现上传大文件的方法分析【图片、文本文件】

最后,这里是视屏连接方便大家学习:

https://www.bilibili.com/video/av24385038/?p=6

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
javascript通过class来获取元素实现代码
Feb 20 Javascript
jquery插件validate验证的小例子
May 08 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
Vue使用NProgress的操作过程解析
Oct 10 Javascript
ES6中Set和Map用法实例详解
Mar 02 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
通过实例解析JavaScript常用排序算法
Sep 02 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
基于vue实现微博三方登录流程解析
Nov 04 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 #Javascript
Node.js + express基本用法教程
Mar 14 #Javascript
Vue渲染过程浅析
Mar 14 #Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 #Javascript
详解使用React制作一个模态框
Mar 14 #Javascript
JavaScript碎片—函数闭包(模拟面向对象)
Mar 13 #Javascript
详解js动态获取浏览器或页面等容器的宽高
Mar 13 #Javascript
You might like
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
浅析Git版本控制器使用
2017/12/10 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
劳动竞赛活动方案
2014/02/20 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
安全隐患整改报告
2014/11/06 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
横店影视城导游词
2015/02/06 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL
nginx之queue的具体使用
2022/06/28 Servers