Загрузка изображения с холста с помощью Grails - PullRequest
3 голосов
/ 03 января 2012

Имеется следующий класс домена:

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});
}

Не разрешено отправлять данные изображения(* 1 010 *).Какой правильный способ сделать это?Когда я удаляю все ссылки на изображение, это нормально, но не то, что я хочу.В другом случае ни идентификатор, ни изображение не обнаруживаются на стороне контроллера (params map).

UPDATE : проблема была решена таким образом.Метод контроллера:

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 Ответ

1 голос
/ 03 января 2012

Чтобы устранить оставшуюся проблему, попробуйте отрендерить некоторый контент в конце вашего 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).

...