所以我使用node.js和express.js来设置本地服务器。我希望能够将画布保存为png,然后使用aws-sdk将该png上传到AS3存储桶。
这是我发布到本地服务器的代码。
module.saveScreen=function(){
var screenName=currentPage;
if(screenName!='Intro' && screenName!=null){
if(data.reachedReview == true){
screenName=screenName+'Revised';
}
var diagram=canvas.toDataURL('image/png');
var dataToSend={
screenName:screenName,
participantNumber:participantNumber,
surveyId:data.surveyId,
diagram:diagram
};
var dataToSendStr=JSON.stringify(dataToSend);
var settings={
processData:false,
url: 'saveScreen',
dataType:'text',
contentType:'application/json',
type:'POST',
data:dataToSendStr,
success: function(data){
console.log('success');
},
error: function(err,textStatus,errorThrown){
console.log('error saving data');
console.log('error textStatus: '+textStatus);
console.log('error errorThrown: '+errorThrown);
return;
}
};
$.ajax(settings);
}
};
这是将图像上传到AS3的服务器端代码:
app.post('/saveScreen',function(req,res){
aws.config.loadFromPath('./aws-config.json');
var s3 = new aws.S3({params: {Bucket: S3_BUCKET} });
var pn=req.body.participantNumber;
var surveyId=req.body.surveyId;
var screenName = req.body.screenName;
var pngFile=pn+'/'+surveyId+"/"+screenName+".png";
var body = req.body.diagram;
var params = {
Bucket: S3_BUCKET,
Key: pngFile,
ACL: 'public-read-write',
Body: body,
ContentType: 'image/png',
ContentEncoding: 'application/json; charset=utf-8'
};
s3.putObject(params, function(err, data){
if(err){ console.log("Error: " + err); }
else{ console.log("Sending Image Success: " + data); }
});
res.json(req.body);
});
我为来自用户的一些数据做了类似的事情,这些数据存储为xml,放入对象,进行字符串化和发布。这样做很好,但这对图像来说并不适用。
我不确定问题究竟在哪里。我认为这是一个编码问题,但我已尝试过许多不同的编码/解码组合,到目前为止还没有任何工作。
任何帮助?