2012-10-08 54 views
1

我需要使ajax提交一些数据,包括图像的base64字符串,这是从画布渲染的。Grails - 无法提交base64 img

当提交我期待在Chrome中检查,一切的网络面板看起来很好,在“表单数据”,它列出所有我要提交的数据。

但Grails中我不能得到的数据,有没有在params,只是控制器名称和动作名称。因此,我用简单的params.dataName得到的一切都是空的。

我想有一些与POST请求的大小,但我不敢肯定,因为我已经没有Ajax这样做过。

这是我上传的代码jQuery的AJAX:

var imgBase64String = canvas.toDataURL("image/png"); 
imgBase64String = imgBase64String .replace('data:image/png;base64,', ''); 
var submitData = $(form).serializeArray(); 
submitData.push({name: "webImage", value: imgBase64String }) 
$.ajax({ 
    type: 'POST', 
    url: '${createLink(action: 'myAction')}', 
    data: submitData, 
    dataType: "html", 
    success: function(data){//Success code}, 
}); 

UPDATE

我在服务器端的代码,它无法在简单的步骤,以获取params数据:

def myAction= { 
     def paramData = params 
     log.info "paramData: " + paramData 

     def url = params.url 
     def email = params.email 
     def webImage = params.webImage 
     log.info "param: url = " + url 
     log.info "param: email = " + email 
     log.info "param: webImage = " + webImage 

     //Other implement code  
} 

和输出:

2012-10-08 16:31:28,988 [http-bio-8080-exec-5] INFO myController - paramData: [action:myAction, controller:myController] 
2012-10-08 16:31:28,989 [http-bio-8080-exec-5] INFO myController - param: url = null 
2012-10-08 16:31:28,989 [http-bio-8080-exec-5] INFO myController - param: email = null 
2012-10-08 16:31:28,989 [http-bio-8080-exec-5] INFO myController - param: webImage = null 

我试图提交的base64映像的大小是1998720,不知道这个问题。

非常感谢。

回答

0

我相信你可以简单地将canvas.toDataURL("image/png")传入$.ajax()方法中的data字段。也可以使用$.post()而不是$.ajax()。所以,你的代码应该是这样的js文件:

$.post('/image/getCanvasImage', //this is your url 
    { 
    img : canvas.toDataURL('image/jpeg'), 
    email : email 
    }, function(data){ 
     //whatever you wanna do with the returned data 
    } 
); 

然后在你的行动,导入import sun.misc.BASE64Decoder包,你可以这样写代码来保存画布图像:

def file = params.img.toString().substring((params.img.toString().indexOf(",")+1),params.img.toString().size()) 
byte[] decodedBytes = new BASE64Decoder().decodeBuffer(file) 
def image = new File("mySavedImage.jpg") 
image.setBytes(decodedBytes) 

应该努力!

+0

是应该,但它不是,因为'params.img'为空,甚至'params.email'也为空值,这就是我所面临的问题。 ;( – BMH

+0

你可以发布你的控制器的动作代码?并且是你的gsp的动作是具有上传动作的控制器的一部分(在你的情况下是'myAction') - 因为我在你的代码中看到你没有给你的' createLink()'标记 –

+0

yes我确定这个动作被调用的正确,我用控制器代码更新了我的问题 – BMH