2011-11-19 18 views
2

在rails中我需要一个base64字符串,并用它来生成轨道中的图片。现在我遇到了麻烦,因为我需要与AJAX调用进行交互(即时在服务器端进行,而另一个人正在做客户端工作)来发送图片。到目前为止,我一直在通过url传递数据(在AJAX请求中)接收我的应用程序中的请求,但现在我不知道是否有可能通过url传输如此巨大的字符串。我怎么能把这些数据(比如他如何传递给我)生成一张图片。Rails以base64

注:我一直在使用回形针我的应用程序,到目前为止,但现在通过表单上传是不是一种选择,它需要在一个AJAX调用其中的数据在一个单一的呼叫通过。

回答

0

你是对的,大多数浏览器限制URL的长度。 IE8/9的限制是2083个字符。即使您的浏览器具有更高的限制,许多服务器也会限制URL长度(Apache的默认限制约为8k)。最好使用POST主体中的数据作为POST请求提交图像。

我会使用jQuery将POST JSON数据发送到服务器。在控制器中,如果设置正确,则不必执行解析JSON的操作。 ActiveSupport将识别内容类型并自动将其解析为params哈希。

实际发布数据将取决于您使用的是哪个JavaScript库。以下是jQuery中的一个示例,您可能想要将它连接到提交按钮的onclick事件。这假定你有一个名为process_image的命名路由。这个代码会在你看来。

$.post(<%= process_image_path %>, { b64_img: "your_base64_image_data" }); 

在您的控制器中,您可以使用params [:b64_img]访问发布的数据。如果你想从控制器返回的东西回客户端,你可以在控制器中做到这一点:

render :json => @model_object 

,并更改了jQuery调用这个样子,所以你可以做一些与返回值:

$.post(<%= process_image_path %>, { b64_img: "your_base64_image_data" }, 
    function(data) { 
    // do something with the data returned by the controller 
    }); 

希望这会有所帮助。你可以阅读更多关于我在这里使用的jQuery post调用:http://api.jquery.com/jQuery.post/

Dan