使用ajax上传图片仅适用于png

时间:2015-02-19 20:55:26

标签: javascript jquery ajax node.js image

我尝试使用AJAX上传图片(以及更多文本数据)并且它可以工作......但只能使用png。嗯...我只尝试过png和jpg,jpg不起作用。 我没有使用表格。这是我的javascript代码:

if(window.FileReader)
{
    reader = new FileReader();
    reader.onloadend = function(e)
    {
        data["image"] =  e.target.result.replace('data:image/png;base64,', '');
        $.post('/notifications/simple_message', data, function(result){
           console.log(result);
        });
    };
    reader.readAsDataURL(img);
}   

在服务器端(使用节点)我有这个:

if(req.body.image)
{
    var date = new Date();
    var buf = new Buffer(req.body.image, 'base64');
    image = req.session.user.name+'-'+date.getTime()+'.png';
    fs.writeFile('./public/images/users/'+image, buf);
}

我正在使用新文件的png扩展名...但我尝试使用jpg并且它无法正常工作 有什么想法??

谢谢!

2 个答案:

答案 0 :(得分:1)

这一行是原因:

data["image"] = e.target.result.replace('data:image/png;base64,', '');

您只是在PNG时删除数据URI的标头。使这更通用:

data["image"] = e.target.result.replace(/^data:.*?;base64,/, '')

答案 1 :(得分:0)

谢谢@ aaronk6。最后我做了这个(并且工作jeje):

<强>客户端:

var ext = img.type.split('image/')[1];
data["ext"]   = ext;
data["image"] =  e.target.result.replace('data:image/'+ext+';base64,', '');

服务器

if(req.body.image)
{
    var date = new Date();
    var buf = new Buffer(req.body.image, 'base64');
    image = req.session.user.name+'-'+date.getTime()+'.'+req.body.ext;
    fs.writeFile('./public/images/user/'+image, buf);
}

真的,非常感谢你。