node.js文件上传处理示例
直入主题,在Node.jsweb开发基本框架的前提下,我们来做一个文件上传功能
上传的handler比较简单,网上都能找到
varurl=require('url'); varexec=require('child_process').exec; varquerystring=require('querystring'); /********************************文件上传第3方模块测试*************************/ functionfileUploadForm(request,response){ response.writeHead(200,{'Content-Type':'text/html'}); varbody='<html>'+ '<head>'+ '<metahttp-equiv="Content-Type"'+ 'content="text/html;charset=UTF-8"/>'+ '</head>'+ '<body>'+ '<formaction="/fileuploadaction"method="post"enctype="multipart/form-data">'+ '<inputname="name"type="text"/>'+ '<inputname="upload"type="file"/>'+ '<inputtype="submit"value="Upload"/>'+ '</form>'+ '</body>'+ '</html>'; response.write(body); response.end(); } <spanstyle="color:rgb(255,0,0);">functionfileUploadAction(request,response){ varfs=require('fs'); varformidable=require('formidable'); varbaseUploadPath="./media/upload/"; varform=newformidable.IncomingForm(); form.uploadDir='./var/tmp'; form.parse(request,function(error,fields,files){ if(!error){ console.log(fields); vardesUploadName=baseUploadPath+files.upload.name; fs.renameSync(files.upload.path,desUploadName); response.writeHead(200,{'Content-Type':'text/html'});//值得注意的是这里的response.writeHead()函数内容要写在form.parse()的callback中要不不会显示 response.write('receivedimage:</br>'); response.write('<imgsrc="/showuploadimage?name='+files.upload.name+'"/>'); response.end(); } }); }</span> functionshowUploadImage(request,response){ varfs=require('fs'); varimageName=querystring.parse(url.parse(request.url).query); varbaseUploadPath="./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); });
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。