最近师弟师妹们在用formidable做文件上传的时候会出现form.parse()不会触发的问题,在stackoverflow也没有找到答案,反而是几个答案推荐使用multiparty来代替,因为那个是express官方支持的包,用法上其实和formidable是类似的,在这里记录一下。

var multiparty = require('multiparty');
var http = require('http');
var util = require('util');
var fs = require("fs"); http.createServer(function(req, res) {
if (req.url === '/upload' && req.method === 'POST') {
// 解析一个文件上传
var form = new multiparty.Form();
//设置编辑
form.encoding = 'utf-8';
//设置文件存储路径
form.uploadDir = "uploads/images/";
//设置单文件大小限制
form.maxFilesSize = 2 * 1024 * 1024;
//form.maxFields = 1000; 设置所以文件的大小总和 form.parse(req, function(err, fields, files) {
console.log(files.originalFilename);
console.log(files.path); //同步重命名文件名
fs.renameSync(files.path,files.originalFilename); res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:\n\n');
res.end(util.inspect({fields: fields, files: files}));
}); return;
} // show a file upload form
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
}).listen(8080);

multiparty API参考

========================================================

更新:

form.parse()不会触发的原因是:app.use(express.bodyParser())这一句处理了文件类型的post,所以导致那些第三方包对文件的处理都不起作用了。

express.bodyParser实际上包括了三部分:express.json, express.urlencoded, 和 express.multipart(就是处理了文件的部分),所以我们实际上只需要它的前两部分就够了。(参考stackoverflow

问题不是出在formidable上,所以正确的做法是:

// 将:
app.use(express.bodyParser()); // 改为:
app.use(express.json());
app.use(express.urlencoded());

(这是express 3的写法,express 4中bodyParser已成为了一个独立的中间件。之所以要这样写是因为老师非常坑爹地给了同学们一个用express 2写的种子项目,而express 2中没有express.json()和express.urlencoded()方法,改成express 4要大刀阔斧地改,只好折衷用express 3了,勉强能用)

nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)的更多相关文章

  1. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  2. node应用通过multer模块实现文件上传

    multer用于处理文件上传的nodejs中间件,主要跟express框架搭配使用,只支持表单MIME编码为multipart/form-data类型的数据请求. 如果要处理其他编码的表单数据可以通过 ...

  3. node+express4+multiparty实现简单文件上传

    文件上传 var fs = require('fs'); var express = require('express'); var multiparty = require('multiparty' ...

  4. SpringMVC+BUI实现文件上传(附详解,源码下载)

    中午有限时间写这博文,前言就不必多说了,直奔主题吧. BUI是一个前端框架,关于BUI的介绍请看博主的文章那些年用过的一些前端框架. 下面我们开始实例的讲解! 一.效果演示: 上传成功后,会发现本地相 ...

  5. 【转】NodeJS教程--基于ExpressJS框架的文件上传

    本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ...

  6. nodejs实现文件上传

    在使用ant-design的upload上传文件时,前端很好实现,那么我们如何实现node服务端呢? 服务端文件上传实现 var express = require('express'); var f ...

  7. Node.js:上传文件,服务端如何获取文件上传进度

    内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...

  8. Python Socket实现文件上传(TCP协议)

    在TCP协议下通过socket模块实现文件上传 #!/usr/bin/env python # -*- coding: utf-8 -*- # desc: tcp_server_file_upload ...

  9. 基于python的selenium两种文件上传操作

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法. 方法二.非input标签上传 这种上传方 ...

随机推荐

  1. UNIX的插头问题

    UNIX的插头问题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 你负责为联合国互联网执行组织(UNIX)的周年会议布置会议室. ...

  2. vscode 代码保存时自动格式化成 ESLint 风格

    vscode 的默认的代码格式化 alt+shift+f (windows) 无法通过 eslint 的代码风格检查,,, 比如: 4个空格和2个空格(ESLint) 字符串用单引号(ESLint) ...

  3. 170522、Linux 平台通过 nginx 和 vsftpd 构建图片服务器

    Nginx WEB 服务器 Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第 ...

  4. 160226、js常用的验证

    /*** 特殊符号 */ function specialCharacter(carNo){ var st=/^[^/@#$%^&*()—''_()!¥~·..,-<><&g ...

  5. 持续集成之jenkins2

    ip 什么是持续集成 没有持续集成 持续集成最佳实践 持续集成概览 什么是Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开 ...

  6. Linux设置程序开机启动-tomcat开机启动

    假设我有一个tomcat应用需要开机启动. 前提你的JAVA环境变量已经配置好没有问题,检测方法如图 然后找到tomcat的目录,我的目录是 /home/yuqing_4.0/tomcat_share ...

  7. python设置redis过期时间

    import time import redis if __name__ == "__main__": try: conn=redis.StrictRedis(host='192. ...

  8. 005-ant design -结合echart

    原因: ant design本省提供图标组件,是基于 BizCharts ,但是使用有些限制比如:TimelineChart带有时间轴的图表.使用 TimelineChart 组件可以实现带有时间轴的 ...

  9. java 多线程 day17 Exchanger

    import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.c ...

  10. Red Hat Linux相关产品iso镜像下载

    Linux系统各发行版镜像下载(持续更新) http://www.linuxfly.org/post/659/ http://www.linuxidc.com/Linux/2007-09/7399.h ...