node.js文件上传处理

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

上传的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);
        });


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Java椭圆曲线密码ECCUtil、ECIESUtil

下一篇:Djano发送邮件