2012-01-03 4 views
3

는 다음 도메인 클래스 적이 :Grails의 캔버스에서 이미지를 업로드

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

} 

그리고 아약스 요청 :

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). 어떻게해야할까요? 이미지에 대한 모든 참조를 제거해도 괜찮지 만 원하는 것은 아닙니다. 또 다른 경우에는 ID 나 이미지가 컨트롤러 측에서 감지되지 않습니다 (params 맵).

업데이트 : 문제는 그런 식으로 해결되었습니다. 컨트롤러 방법 :

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

JS 기능 :

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

무엇 내가 그것을 해결하기 위해 수행해야 내가 브라우저 측에 다음 메시지가 계속

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

그러나?

답변

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).

+0

감사합니다. 작동합니다. – tiktak

관련 문제