Rails采用base64

时间:2011-11-19 01:31:23

标签: ruby-on-rails ajax paperclip base64

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

注意:到目前为止,我一直在为我的应用程序使用paperclip,但现在通过表单上传不是一个选项,它需要在AJAX调用中,其中数据在一次调用中传递。

1 个答案:

答案 0 :(得分:0)

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

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

实际发布数据取决于您使用的是哪个javascript库。这是jQuery中的一个示例,您可能希望将其连接到提交按钮的onclick事件。这假设您有一个名为process_image的命名路由。此代码将出现在您的视图中。

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

在您的控制器中,您可以使用参数[: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帖子调用的更多信息:http://api.jquery.com/jQuery.post/