我尝试使用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并且它无法正常工作 有什么想法??
谢谢!
答案 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);
}
真的,非常感谢你。