nodejs+express实现文件上传

原创 2015年11月20日 11:36:35

最近项目上要使用到文件上传的功能,在使用了express框架的前提下,我们可以使用formiable库来实现文件上传的处理

在使用express框架处理请求时,我们一般情况下会再请求的中间件上面使用bodyParse这个库来对post请求进行处理,一般情况下会将请求转换成json格式的数据,但是对于上传的文件数据的处理如果使用了bodyParse.json()将其请求数据转化成json格式的话,就会报错,所以我们要将这个处理步骤去掉,因为对于post请求,http一般会将post请求分成不同的数据段进行传输,所以我们需要监听req的data事件

function uploadImg(req,res){
	var imgsays = [];
	var num = 0;
	var isStart = false;
	var ws;
	var filename;
	var path;
	req.on('data' , function(chunk){
	    var start = 0;
	    var end = chunk.length;
	    var rems = [];

        /*
        *数据包的前面的4个/r/n之后就是文件数据,而结尾的话则是去掉\r\n--WebKitFormblabla--\r\n
        */
	    for(var i=0;i<chunk.length;i++){
	        if(chunk[i]==13 && chunk[i+1]==10){//判断是否是\r\n
	            num++;
	            rems.push(i);

	            if(num==4){//从文件头取出文件名
	                start = i+2;
	                isStart = true;

	                var str = (new Buffer(imgsays)).toString();
	                filename = str.match(/filename=".*"/g)[0].split('"')[1];
	                path = './tmp/'+filename;
	                ws = fs.createWriteStream(path);//打开一个文件写入流,写入到指定的文件中,如果该文件已经存在就直接写入,如果没有就新建一个文件

	            }else if(i==chunk.length-2){    //说明到了数据尾部的\r\n
	                end = rems[rems.length-2];
	                break;
	            }
	        }

	        if(num<4){
	            imgsays.push(chunk[i])
	        }
	    }

	    //处理完一段数据之后直接写入文件
	    if(isStart){
	        ws.write(chunk.slice(start , end));
	    }
	});

	req.on("end",function(){
	    ws.end();
	    logger.info("保存"+filename+"成功");
	    res.json({"msg":"保存成功","resultCode":"0000"});
	});
}
对于请求数据,一般前四个/r/n中包括的就是文件的名字等文件头信息,在前四个/r/n到后两个/r/n之间的数据就是文件的数据,我们使用边上传边写入的方式来加快文件的写入,在读到第一段数据的时候,我们就打开一个写入流,每处理完一段数据我们就将它写入文件,

在读取完post请求数据之后,我们关闭写入流,同时返回一个文件保存成功的提示

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

angular2+nodejs实现图片上传

在使用angular2进行图片上传的时候,遇到了各种各样的问题。在多番尝试之后最终成功上传图片,下面将我的方法分享给大家:nodejs 后台代码var express = require("expre...

Nodejs express、html5实现拖拽上传

一、前言       文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传。给用户体验带来很大问题。html5开始支持拖拽上传的需要的api。...

使用nodejs+express(4.x+)实现文件上传

最简单的做法是通过“connect-multiparty”中间件实现上传。 通过在项目中npm install connect-multiparty进行安装。  用法: var mu...

nodejs express+ejs+formidable实现文件上传

一人行者 万人追随nodejs express+ejs+formidable实现文件上传刚才做例子的时候遇到不少的问题: 1.表单提交的时候enctype=”multipart/fo...

Ajax异步文件上传与NodeJS express服务端处理

为了避免在实现简单的异步文件上传功能时候引入一个第三方库文件的尴尬情形(库文件可能造成多余的开销,拉低应用加载速度,尤其是在引入库文件之后仅使用其中一两个功能的情况下,性价比极低),最近了解了一下文件...

nodejs express 4.0+的文件上传

express 框架4.0+取消了原来的中间件,所以之前的  app.use(express)

基于NodeJs的Express及Webuploader实现大文件分片上传与合并(一)

我在之前项目中设计实现的大文件上传方案,尤其注重上传文件的快速本地化(局域网服务器),之后通过中心控制服务器进行分段任务的传输与合并。该方案能够很好的解决有限时间大文件上传的需求,但在前端这块儿还是一...

【服务端知识点】(十五天)文件上传实现——30天node+mongo+react+redux+express搭建完美资源后台管理系统+前端(全栈工程师 结合antd)

这个系列文章是自己在开发过程中,自己感悟学习以及借鉴各方大师大神经验分享,非常尊重每个人的劳动成果,目的就是与大家共同分享学习,共同进步! 后台资源管理,增删改查操作必不可少,其中增加资源又是一切的根...

node使用express搭建简单web框架并实现文件上传

node使用express搭建简单web框架并实现文件上传,node入门,express入门

nodejs 初步使用以及实现文件上传的功能

这个例子是引用了《nodejs入门》中的文件上传的例子, 相应的原理就不讲解了,可以查看上面所说的那本书,这里自会贴出相关的代码和注意点: 首先是server.js模块的代码:实现了基本的服务器的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)