node.js下四种post提交数据的方式

今天说分享的是其中一种,就是上传文件.


Express 4.0 以后,将功能原子化,高内聚,低耦合,独立出了很多中间件


今天主要分享文件上传

对于connect-multiparty ,他是专门处理此类post数据相关的依赖包,也是博客之前使用的方式 github 官方地址: https://github.com/andrewrk/connect-multiparty

安装

npm install connect-multiparty

使用

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();app.post('/formdata',multipartMiddleware, function (req, res) {console.log(req.body);res.send(req.body);
});

注意

  • form标签里做这样的标识 enctype="multipart/form-data"

Connect-Busboy 中间件实现上传

github官方地址:https://github.com/mscdex/connect-busboy

install

npm install connect-busboy

使用

node.js 启动页 var busboy = require('connect-busboy');

中间件配置

app.use(busboy({limits: {fileSize: 10 * 1024 * 1024 // 10MB}
}));

上传文件处

这里的代码有点bug ,已经修复,你可以忽略,直接看我的另外一篇博客 Connect-Busboy 上传文件

function upload(req, res, next) {req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {var tmp_path=path.join(os.tmpDir(), path.basename(filename));file.pipe(fs.createWriteStream(tmp_path));file.on('end',function(){var uuid = tool.generateUUID();commfile.savePathFile(uuid, mimetype, tmp_path, true, function(err, fileBase64) {if (err) {res.json({success:false,url:''});}else{res.json({success: true,url: '/file/' + uuid});}});});});req.pipe(req.busboy);}

出自:node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传

> ## 说明 >> req.busboy 会监听几个事件 * req.busboy.on('file',function(fieldname, file, filename, encoding, mimetype){ .....} *上传文件时监听此事件* * req.busboy.on('field',function(key, value, keyTruncated, valueTruncated){ .... } *监听form表单中非文件类型其他参数*

上面的上传示例只用到了处理文件类型的字段,没有涉及到非文件类型的字段.所以只监听了 file 事件.

req.busboy.on('file’, function (fieldname, file, filename, encoding, mimetype)

上面的事件会在 enctype="multipart/form-data" 的 form 表单post 提交数据时被监听

function(fieldname, file, filename, encoding, mimetype) 回调函数中是服务器获取到的文件相关处理信息 fieldname 是一个上传文件的标识 file 是上传的文件流句柄 filenname 是文件名(包含扩展名) encoding 是文件编码类型 mimetype 是文件mime类型 var tmp_path=path.join(os.tmpDir(), path.basename(filename)); 根据系统临时目录 和 文件名,来定位文件临时存放路径


os.tmpDir() 是当前系统临时目录,需要引用 require(‘os’); path.basename(filename) 是提取filename 路径中最后一个 / 之后的文件名,比如 /aa/bb/cc.jpg 此方法最后得到的是 cc.jpg ,需 require(‘path’)


file.pipe(fs.createWriteStream(tmp_path)); 根据上面的临时文件目录,把上传文件临时保存起来 ,这里用到了 流 的 pipe 它就像一个水管子能源源不断的把字节流传递给文件流,直到文件被写入成功为止 file.on('end’,function(){ …} 此事件是在 文件 被写入完成时触发的事件. 当文件被写入临时目录成功后,马上触发上面的事件,我在这里 调用 commfile.savePathFile 方法把文件读取并写入到了数据库

如果你的文件是直接存放在服务器指定目录,那么完全没必要指定临时目录,再去拷贝,直接一步到位,存放在指定上面目录即可

我之所以用这种方法,是因为我的图片文件全部保存在数据库中

如果此上传方法的入口开放给用户,请注意根据 filename 后缀名 及 mimetype 来判断文件类型,进行过滤

你可能感兴趣

  • pandoc markdown 生成pdf文档
  • forever node.js web应用中不可或缺的伟大模块
  • node.js AES/ECB/PKCS5Padding 与其他语言的加密解密通用
  • ejs母版页让你的node.js应用开发更快更有效- 一介布衣
  • node.js 实现一个简单的登录拦截器

转载于:https://www.cnblogs.com/yijiebuyi/p/4857406.html

node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传相关推荐

  1. SSM框架 基于Bootstrap fileinput 实现文件上传功能

    SSM框架 基于Bootstrap fileinput 实现文件上传功能 pom.xml文件的配置 想要实现SSM框架实现多文件上传,必要的jar包必须要在pom.xml文件中引入.如下: <! ...

  2. layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...

    写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题.我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到Mu ...

  3. springmvc与Servlet3.0不依赖common包实现文件上传

    Servlet3.0以上的版本不再需要第三方组件Commons.io和commons-fileupload,可以使用@MultipartConfig注解在Servlet上进行配置上传,也可以在web. ...

  4. 【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理

    SpringMVC的文件上传 服务器端实现文件上传的技术有很多种,Servlet3.0,FileUtils,框架等等,都可以实现文件上传,不管使用哪一种上传技术,都必须满足三要素: 表单项type=& ...

  5. Dreamer 3.0 支持json、xml、文件上传

    自己写的框架,功能类似Struts2.x 下载地址:http://pan.baidu.com/share/link?shareid=3273223286&uk=470382596 新增功能: ...

  6. ajax框架怎么学,Ajax框架之DWR学习(文件上传案例)

    DWR文件上传起来 还是挺方便的,直接就是咔咔的上传 ,实现了静态的文件上传,老爽了,需要依赖commons-fileupload 这个上传包. 目录结构 环境搭建 pom.xml commons-f ...

  7. java文件上传maven_ssm+maven框架搭建实现ajax多文件上传功能

    项目描述 用myeclipse工具搭建的ssm+maven项目, 之前文件上传是用form表单实现的,可是form表单上传文件会刷新页面,所以就得用ajax无刷新实现文件上传. 运行环境 jdk7+t ...

  8. Resumable.js - 基于HTML5 File API的可断点续传的文件上传插件

    http://resumablejs.com/ A JavaScript library providing multiple simultaneous, stableand resumable up ...

  9. jquery.form.js java_使用jQuery.form.js/springmvc框架实现文件上传功能

    使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jque ...

  10. node+multer中间件实现单文件、多文件上传—超详细

    一.概念 Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件. 注意: Multer 不会处理任何非 multipart ...

最新文章

  1. 个人易遗忘的代码记录
  2. 第四周编程总结--助教
  3. Automatic Exploit Generation:漏洞利用自动化
  4. 第三次学JAVA再学不好就吃翔(part22)--匿名对象
  5. c# 类对象和实例对象_C#类和对象能力问题 套装4
  6. [css] 如何隐藏没有静音、自动播放的音视频?
  7. 研究称语言能力比数学能力更重
  8. Android用按钮确定单选框,Android RadioButton单选框的使用方法
  9. Pycharm - 创建python 文件模版
  10. Spring框架中XML配置文件注入集合(数组、LIST、MAP、SET)属性
  11. vue2.0 element学习
  12. TypeScript学习(三):联合类型及推论
  13. thinkcmf5调用指定分类的二级_Mybatis一二级缓存的使用和实现原理
  14. EXCEL中的数据分析—描述统计
  15. 串口调试助手fx2n_PLC串口调试助手详细讲解(结合实操)
  16. 电脑鼠标右键应用卡死、转圈圈、资源管理器关闭等问题
  17. 手机破解并连接WiFi后,可以通过USB数据线与电脑共享WiFi
  18. vue input失焦事件
  19. Python基础语法学习6
  20. 使用百度翻译开发平台,英文翻译为中文

热门文章

  1. librosa.stft librosa.core.stft
  2. 卡方检验检验水准矫正_医学统计学 第七章 卡方检验
  3. 苹果无线网服务器改什么速度快,iPhone网速慢怎么办?苹果手机如何配置DNS?
  4. 用matlab绘制对数图像,matlab图像绘制(进阶篇)
  5. 浅说物联网之一:物联网圈子的三个玩家
  6. 黑马程序员_面向对象简介
  7. windows 密码过期_为什么我的密码在Windows中过期?
  8. Windows10邮件添加qq邮箱已过期问题
  9. poj 1260 dp
  10. matlab中单对数函数,matlab对数函数-对数函数,MATLAB