如何使用AJAX帖子将画布图像上传到Amazon S3存储桶?

时间:2015-03-23 16:31:51

标签: javascript ajax node.js amazon-s3

所以我使用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,放入对象,进行字符串化和发布。这样做很好,但这对图像来说并不适用。

我不确定问题究竟在哪里。我认为这是一个编码问题,但我已尝试过许多不同的编码/解码组合,到目前为止还没有任何工作。

任何帮助?

0 个答案:

没有答案