使用Grails从画布上载图像

时间:2012-01-03 00:09:17

标签: ajax image grails upload html5-canvas

拥有以下域类:

class Topic {
    byte[] image
}

这是控制器:

class TopicController {

def uploadImage () {
        println params
        if(params.image && params.id && params.image.length != 0){
            def topic = Topic.get(params.id)
            topic.image = params.image
        }
    }

}

和ajax请求:

function postImage(){
    var topicId = $('#topic-id').attr('value');
    var imageData = context.getImageData(0,0,canvas.width, canvas.height);
    $.post("../uploadImage", {'id': topicId,'image': imageData.data});
}

无法发送图像数据(imageData.data)。什么是正确的方法呢? 当我删除所有对图像的引用时,这没关系,但不是我想要的。在另一种情况下,控制器侧(params地图)都没有检测到id和图像。

更新:问题以这种方式解决了。控制器方法:

def uploadImage() {
    //println params
    if(params.image && params.id){
        def topic = Topic.get(params.id)
        topic.image = Base64.decode(params.image)
    }
}

JS功能:

function postImage(){
        var topicId = $('#topic-id').attr('value');
        var image = canvas.toDataURL("image/png");
        image = image.replace('data:image/png;base64,', '');
        $.post("../uploadImage", {'id': topicId,'image': image});
    }

但我继续在浏览器端获得下一条消息:

Failed to load resource: the server responded with a status of 404 (Not Found)
POST ../uploadImage 404 (Not Found)

我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:1)

要解决剩余问题,请尝试在uploadImage方法结束时呈现一些内容:

def uploadImage() {
    //println params
    if(params.image && params.id){
        def topic = Topic.get(params.id)
        topic.image = Base64.decode(params.image)
    }

    render 'Success'
}

如果您没有执行导致响应提交的内容(例如render()redirect()),Grails将尝试呈现与操作同名的视图(在您的情况下) ,uploadImage.gsp)。