概述

  1. node.js在处理客户端以POST方式提交的数据时,比较复杂,要写两个监听(data、end),并且要处理上传的图片、文件时也比较艰难
  2. 常用第三方模块包formidable来处理客户端以POST方式提交的表单、文件、图片等

使用GitHub使用文档

  1. 安装npm install formidable
  2. 引入const formidable = require('formidable');
  3. 在服务器端引入formidableconst formidable = require('formidable');
  4. 在post请求中
    ① 实例化

    let form = new formidable.IncomingForm();
    

    ② 指定文件上传文件夹

    form.uploadDir = path.join(__dirname, 'dir');
    

    ③ 指定文件后缀是否保存

    form.keepExtensions = true;
    

    ④ 解析request发送过来的数据

    form.parse(req, function (err, fields, files) {if (err) {throw err;}console.log(fields);console.log(files);res.end('success');
    });
    

使用注意

  1. 表单提交的过程中涉及文件或者图片上传,则一定要设置表单头,即在form标签上加属性为enctype="multipart/form-data",否则文件或图片会上传时效
  2. < input type=“file” name=“uploadImg”>,当中的name属性一定要赋值
  3. 前端传递数据的时候,不可以使用序列化,要是用new FormData($form[0]),
  4. 前端发起ajax请求的时候,不要将数据处理转化成一个查询字符串processData: false,
  5. 前段发起ajax请求的时候,不要设置请求头contentType:false

案例

  1. 前端界面
    index2.ejs

    <!doctype html>
    <html lang="zh-cn">
    <head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title></title>
    </head>
    <body>
    <form action="/" method="post" enctype="multipart/form-data"><label>时间:<input type="text" name="l_name"></label><br><label>地点:<input type="text" name="l_address"></label><br><label>人物:<input type="file" name="l_person"></label><br><input id="btn_sub" type="button" value="提交">
    </form>
    <script src="node_modules/jquery/dist/jquery.js"></script>
    <script>$('#btn_sub').on('click', function () {var $form = $('form');$.ajax({url: $form.attr('action'),type: $form.attr('method'),data: new FormData($form[0]),// 不要处理转化成一个查询字符串processData: false,contentType: false,success: function (data) {console.log(data);}})});
    </script>
    </body>
    </html>
    
  2. 服务器代码

    const express = require('express');
    const path = require('path');
    const fs = require('fs');
    const formidable = require('formidable');const app = express();app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');app.use('/node_modules', express.static(path.join(__dirname, '/node_modules')));app.get('/', (req, res, next) => {res.render('index2');
    });app.post('/', (req, res, next) => {// 1. 创建实例let form = new formidable.IncomingForm();// 2. 指定文件的上传文件夹form.uploadDir = path.join(__dirname, 'dir');// 3. 指定文件的后缀form.keepExtensions = true;// 4. 解析request发送过来的数据form.parse(req, function (err, fields, files) {if (err) {throw err;}console.log(fields);console.log(files);res.end('success');});
    });app.listen(2000, () => {console.log('running!')
    });
    

Node.js:借助formidable文件上传相关推荐

  1. node.js学习笔记 - 文件上传(并用七牛云托管)

    文章目录 环境搭建 准备工作 安装相关依赖 代码实现 执行 环境搭建 准备工作 提示:本文采用ts来构建环境,要是以js构建则取掉类型定义即可. 初始化项目 创建目录fileUpload-demo- ...

  2. js插件---IUpload文件上传插件(包括图片)

    js插件---IUpload文件上传插件(包括图片) 一.总结 一句话总结:上传插件找到真正上传位置的代码,这样就可以知道整个上传插件的逻辑了, 找资料还是github+官方 1.如何在js中找到真正 ...

  3. 基于js管理大文件上传以及断点续传

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 前言 前端小伙伴们平常在开发过程中文件上传是经常遇到的一个问题,也许你能够实现相关的功能,但 ...

  4. AjaxUpLoad.js使用实现文件上传

    AjaxUpLoad.js的使用实现无刷新文件上传,如图. 图1 文件上传前 图2 文件上传后 1.创建页面并编写HTML 上传文档: <div class="uploadFile&q ...

  5. Js中清空文件上传字段(input type=file )

       表单中type=file字段的value属性无法由js来附值,一但选中某个文件后,如果用户不手动去清空那么这个值将保留,提交表单时对应文件也会被提交上去.当然在服务器上会再次验证,不过为了避免上 ...

  6. js可以控制文件上传的速度吗?

    为了减轻服务器负载,对于上传和下载的情况,我们需要进行流量控制,一般的方法是服务端做限流举措,比如很多ftp服务器,但是我想是不是可以使用前端js做呢? 顺着这个想法,我查了下资料,目前来看结论是No ...

  7. node使用express+multer文件上传和下载的问题

    简单使用multer实现文件的上传和下载: 1.文件上传使用multer,首先要在项目中安装multer模块. npm install multer -save 2.这里使用express模块,mul ...

  8. java spring js文件_005-html+js+spring multipart文件上传

    一.概述 需求:通过html+js+java上传最大500M的文件,需要做MD5 消息摘要以及SHA256签名,文件上传至云存储 1.1.理解http协议 https://www.cnblogs.co ...

  9. JS:关于断点续传插件 Resumable.js 中的文件上传控制问题

    官方文档:http://www.resumablejs.com/ 它是一个JavaScript库,通过HTML5 File API提供多个同步,稳定和可恢复的上传. 该库旨在通过HTTP将容错引入上传 ...

  10. 原生JS实现HTML文件上传,HTML5 js实现拖拉上传文件功能

    在HTML5的pc上面实现了相当多的功能,工作中也用到了拖拉上传,特地记录下该功能 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ondrag - 元素正在拖 ...

最新文章

  1. android同步服务启动,Android Service的基本用法(startService启动方式生命周期)
  2. CentOS 初体验二十三:redis常用命令:List
  3. Lightbox 效果
  4. 《设计模式》3.结构型模式
  5. 杭州云栖大会阿里云放大招,8K远程医疗会诊引关注
  6. Volcano:带你体验容器与批量计算的碰撞的火花
  7. MySQL最基础的操作
  8. JMH性能测试,试试你代码的性能如何
  9. 动态修改路由_tutorial第二部分-路由参数
  10. clock gate cell
  11. tp5——实践前台模板引入
  12. vba字典的key属性、item属性和keys方法、items方法、add方法
  13. 应用程序无法正常启动0xc000007b解决方法
  14. Python爬虫BeautifulSoup4小记
  15. 实现拖拉机发牌程序——界面版python
  16. 【巷子】---fetch---基本使用
  17. 一次ORACLE数据库的勒索病毒的处理
  18. 彻底搞懂行内元素,块级元素,行内块元素~
  19. MAP 推荐系统 Mean Average Precision
  20. VScode配置latex时 出现 “Cannot find LaTeX root file”且文本无高亮提示,不显示tex图标

热门文章

  1. 25.Yii2 自动加载
  2. 26.TCP/IP 详解卷1 --- Telnet 和 Rlogin : 远程登录
  3. 25. JavaScript PopupAlert
  4. 第003讲 无序列表 有序列表 框架
  5. 理解 Zend 框架 第 1 部分: 基础
  6. css3中的transition与animation中的delay问题
  7. 网页编码utf8 gb2312 gbk的区别
  8. NE555脉冲模块电路
  9. MVC学习笔记:MVC实现用户登录验证ActionFilterAttribute用法并实现统一授权
  10. grub的boot loader安装在磁盘上的位置