2012-01-03 92 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 
     } 
    } 

} 

和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地圖)。

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

要解決你的剩餘問題,請嘗試在你的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 2012-01-03 15:38:39