node.js文件上传处理

来源:互联网 发布:斯皮尔伯格 人工智能 编辑:程序博客网 时间:2024/04/30 04:45

在我之前讲到的node.js web 开发基本框架的前提下(http://blog.csdn.net/clh604/article/details/8488739),我们来做一个文件上传功能


上传的handler比较简单,网上都能找到

var url=require('url');var exec=require('child_process').exec;var querystring=require('querystring');/********************************文件上传 第3方模块测试*************************/function fileUploadForm(request,response){    response.writeHead(200,{'Content-Type':'text/html'});    var body = '<html>'+        '<head>'+        '<meta http-equiv="Content-Type" '+        'content="text/html; charset=UTF-8" />'+        '</head>'+        '<body>'+        '<form action="/fileuploadaction" method="post" enctype="multipart/form-data">'+        '<input name="name" type="text" />'+        '<input name="upload" type="file" />'+        '<input type="submit" value="Upload" />'+        '</form>'+        '</body>'+        '</html>';    response.write(body);    response.end();}function fileUploadAction(request,response){    var fs=require('fs');    var formidable=require('formidable');    var baseUploadPath="./media/upload/";    var form=new formidable.IncomingForm();    form.uploadDir='./var/tmp';    form.parse(request,function(error,fields,files){        if(!error){            console.log(fields);            var desUploadName=baseUploadPath+files.upload.name;            fs.renameSync(files.upload.path, desUploadName);            response.writeHead(200,{'Content-Type':'text/html'});//值得注意的是这里的response.writeHead()函数内容要写在form.parse()的callback中要不不会显示            response.write('received image:</br>');            response.write('<img src="/showuploadimage?name='+files.upload.name+'" />');            response.end();        }    });}function showUploadImage(request,response){    var fs=require('fs');    var imageName=querystring.parse(url.parse(request.url).query);    var baseUploadPath="./media/upload/";    fs.readFile(baseUploadPath+imageName.name, "binary", function(error, file) {        if(error) {            response.writeHead(500, {"Content-Type": "text/plain"});            response.write(error + "\n");            response.end();        } else {            response.writeHead(200, {"Content-Type": "image/png"});            response.write(file, "binary");            response.end();        }    });}exports.fileuploadform=fileUploadForm;exports.fileuploadaction=fileUploadAction;exports.showuploadimage=showUploadImage;

同时在index.js中添加

handle['/fileuploadform']=handlers.fileuploadform;handle['/fileuploadaction']=handlers.fileuploadaction;handle['/showuploadimage']=handlers.showuploadimage;

有一点需要注意的是,在有需要处理文件上传的时候,不能在server中添加

request.setEncoding('utf8');//设置这个很可能导致上传失败,这是formidable模块的一个bug吧

request.addListener("data",function(tempPostData){            postData+=tempPostData;        });        request.addListener("end",function(){            route(request,response,postData,handle);        });


原创粉丝点击