expressjs处理混合表单
发布于 12 年前 作者 tank00 7607 次浏览 最后一次编辑是 8 年前
   之前想用 formidable来处理,后来发现在新版本expressjs下根本无法使用。查了一下,新版的ExpressJS使用了1.8 以上版本的Connect,提供了自己的BodyParser用来做form表单的解析。                      Connect的BodyParser的时候并没有提供process事件的支持。注释里面也有说明如果希望直接使用formidable直接处理request的话,可以使用delete express.bodyParser.parse['multipart/form-data'];先删除它的这层解析,再用formidable的方法直接处理请求。
    我还是选择了直接用expressjs直接来处理。方法如下。
exports.uploadimg = function(req, res) {

// 获得文件的临时路径
var tmp_path = req.files.myfile.path;
// 指定文件上传后的目录 - 示例为"images"目录。
var target_path = './public/images/' + req.files.myfile.name;
// 移动文件
fs.rename(tmp_path, target_path, function(err) {
	if (err) throw err;
	// 删除临时文件夹文件,
	fs.unlink(tmp_path, function() {
		if (err) throw err;
		var info = '{"error":"","msg":"'+target_path+'"}';
		res.send(info);
		// res.send('File uploaded to: ' + target_path + ' - ' + req.files.myfile.size + ' bytes');
	});
});

} 经过测试前端必须是 enctype="multipart/form-data"后台才能识别,用 enctype="multipart/file"就不行。为了监听发送成功返回的事件,我采用了ajaxFileUpload的Jquery插件来实现。具体方法如下:

function ajaxFileUpload() {

    /*
        prepareing ajax file upload
        url: the url of script file handling the uploaded files
                    fileElementId: the file type of input element id and it will be the index of  $_FILES Array()
        dataType: it support json, xml
        secureuri:use secure protocol
        success: call back function when the ajax complete
        error: callback function when the ajax failed

    */
    $.ajaxFileUpload
    (
        {
            url:'uploadimg',
            secureuri:false,
            fileElementId:'myfile',
            dataType: 'json',
            success: function (data, status)
            {
                if(typeof(data.error) != 'undefined')
                {
                    if(data.error != '')
                    {
                        alert(data.error);
                    }else
                    {
                        alert(data.msg);
                    }
                }
            },
            error: function (data, status, e)
            {
                alert(e);
            }
        }
    )

    return false;

}

希望对大家有用!

回到顶部