welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

NodeJS实现文件上传功能


分类 OurJS   关键字 分享   标签 web   ourjs   发布 admin  1434025862607
注意 转载须保留原文链接,译文链接,作者译者等信息。  
前文Uploadify文件上传功能属于前端页面上传代码,这里是Node后端接收并保存上传文件的代码。主要涉及fs模块的某几个方法:stat获取目录状态,mkdir新建目录,createReadStream读文件流,createWriteStream写文件流,pipe复制流。

接收文件上传请求,webSvr.url支持get和post请求,而webSvr.file支持文件上传请求
webSvr.file('/upload/direct.html', function(req, res) {
	var file = req.files.file;         //上传的文件由webSvr解析为req.files,file对应name属性<input type="file" name="file"/>
	var type = req.body.type;          //表单参数使用req.body.name,get请求使用req.params.name或url.parse(req.url, true).query.name
	
	var filename = file.name;
	if("true"==req.body.rename) {      //rename参数控制是否需要重命名文件为file_timestamp.ext格式
		var split = filename.split(".");
		filename = split[0]+"_"+utility.format(new Date(),'yyMMddHHmmss')+"."+split[1];
	}
	
	var dir = uploads_file+type;      //uploads_file=/soft/uploads,指定文件保存根目录
	var path = dir+"/"+filename;      //type参数指定文件保存子目录,例如img/2015
	
	fs.stat(dir, function(err, stats){
	    if(err){                      //判断文件目录是否存在,若不存在则创建目录
	    	console.log("make dir: "+dir);
			fs.mkdir(dir, function(err){
				if(err) console.log(err);
				else copyFile(file.path, path);
			});
	    }else copyFile(file.path, path);
	})
	
	res.writeHead(200, {"Content-Type": "text/plain"});
	res.end(static_url+","+path);         //返回domain,path,实际页面仅使用了path(适应https协议),domain可用于指定静态资源独立域名(目前为空)
})

复制文件,fs.rename方法调用会失败
function copyFile(src, dst){
	console.log("copy "+src+" to "+dst);
	var readable=fs.createReadStream(src),
    writable=fs.createWriteStream(dst);
	readable.pipe(writable);
}

我要赚钱:注册财富箱,享投资12%收益!