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);
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。